C++STL之vector
Vector
动态数组,支持随机访问,尾部插入和删除高效
适用场景:需要频繁访问且尾部操作比较多的情况
创建和初始化。
添加、删除和修改元素。
访问和遍历元素。
获取大小和容量。
排序和交换。
1.创建和初始化
#include <iostream>
#include <vector>int main() {// 创建一个空的 vectorstd::vector<int> vec1;// 创建并初始化一个包含 5 个元素的 vector,初始值为 0std::vector<int> vec2(5);// 创建并初始化一个包含 5 个元素的 vector,初始值为 10std::vector<int> vec3(5, 10);// 使用初始化列表创建 vectorstd::vector<int> vec4 = {1, 2, 3, 4, 5};// 输出 vec4 的内容std::cout << "vec4: ";for (int i : vec4) {std::cout << i << " ";}return 0;
}
2.添加元素
#include <iostream>
#include <vector>int main() {std::vector<int> vec;// 在尾部添加元素vec.push_back(10);vec.push_back(20);vec.push_back(30);// 使用 emplace_back 直接构造元素vec.emplace_back(40);// 输出 vector 内容std::cout << "vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}
3.访问元素
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用下标访问元素std::cout << "Element at index 2: " << vec[2] << std::endl;// 使用 at() 访问元素(会检查边界)std::cout << "Element at index 3: " << vec.at(3) << std::endl;// 访问第一个和最后一个元素std::cout << "First element: " << vec.front() << std::endl;std::cout << "Last element: " << vec.back() << std::endl;return 0;
}
4.遍历
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用下标遍历std::cout << "Using index: ";for (size_t i = 0; i < vec.size(); ++i) {std::cout << vec[i] << " ";}std::cout << std::endl;// 使用范围 for 循环遍历std::cout << "Using range-based for loop: ";for (int i : vec) {std::cout << i << " ";}std::cout << std::endl;// 使用迭代器遍历std::cout << "Using iterator: ";for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
5.修改
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 修改指定位置的元素vec[2] = 100;// 输出修改后的 vectorstd::cout << "Modified vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}
6.删除
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 删除最后一个元素vec.pop_back();// 删除指定位置的元素(删除第 2 个元素)vec.erase(vec.begin() + 1);// 输出剩余元素std::cout << "vec after deletions: ";for (int i : vec) {std::cout << i << " ";}return 0;
}
7.获取大小和容量
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 获取元素个数std::cout << "Size: " << vec.size() << std::endl;// 获取当前容量std::cout << "Capacity: " << vec.capacity() << std::endl;// 调整大小(如果新大小大于当前大小,会用默认值填充)vec.resize(10);// 预留空间(避免频繁扩容)vec.reserve(20);return 0;
}
8.排序
#include <iostream>
#include <vector>
#include <algorithm> // 包含 sort 函数int main() {std::vector<int> vec = {5, 3, 1, 4, 2};// 对 vector 进行升序排序std::sort(vec.begin(), vec.end());// 输出排序后的 vectorstd::cout << "Sorted vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}
9.二维Vector
#include <iostream>
#include <vector>int main() {// 创建一个 3x3 的二维 vectorstd::vector<std::vector<int>> vec = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 访问二维 vector 的元素std::cout << "Element at (1, 2): " << vec[1][2] << std::endl;// 遍历二维 vectorfor (const auto& row : vec) {for (int val : row) {std::cout << val << " ";}std::cout << std::endl;}return 0;
}
10.vector交换
#include <iostream>
#include <vector>int main() {std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = {4, 5, 6};// 交换两个 vector 的内容vec1.swap(vec2);// 输出交换后的结果std::cout << "vec1: ";for (int i : vec1) {std::cout << i << " ";}std::cout << "\nvec2: ";for (int i : vec2) {std::cout << i << " ";}return 0;
}