std::vector
是 C++ 标准库提供的动态数组容器,具有自动管理内存、随机访问、动态增长等特性。它可以在不手动管理内存的情况下存储和操作一组元素。
基本用法
首先,需要包含头文件 <vector>
:
创建和初始化
可以通过多种方式创建和初始化 vector
:
#include <vector>
#include <iostream>
int main() {
// 默认构造函数,创建一个空的 vector
std::vector<int> vec1;
// 使用初始大小和初始值
std::vector<int> vec2(10, 5); // 10 个元素,每个元素都是 5
// 使用初始化列表
std::vector<int> vec3 = {1, 2, 3, 4, 5};
// 使用迭代器范围
int arr[] = {1, 2, 3, 4, 5};
std::vector<int> vec4(arr, arr + 5);
return 0;
}
访问元素
可以使用下标运算符 []
或成员函数 at()
访问 vector
中的元素:
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用下标运算符
std::cout << vec[0] << std::endl; // 输出 1
// 使用 at() 函数
std::cout << vec.at(1) << std::endl; // 输出 2
修改元素
可以使用下标运算符 []
或成员函数 at()
修改 vector
中的元素:
vec[0] = 10;
vec.at(1) = 20;
添加和删除元素
std::vector
提供了多种方法来添加和删除元素:
std::vector<int> vec;
// 添加元素到末尾
vec.push_back(1);
vec.push_back(2);
// 插入元素到指定位置
vec.insert(vec.begin(), 0); // 在开头插入 0
// 删除最后一个元素
vec.pop_back();
// 删除指定位置的元素
vec.erase(vec.begin()); // 删除第一个元素
// 清空 vector
vec.clear();
遍历元素
可以使用迭代器或范围循环遍历 vector
中的元素
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用迭代器
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 使用范围循环 (C++11 及以上)
for (int val : vec) {
std::cout << val << " ";
}
std::cout << std::endl;
注意事项
- 迭代器失效问题:在修改
vector
结构(如插入、删除元素)时,所有指向vector
元素的迭代器、指针和引用可能会失效,需要特别小心。 - 性能考虑:
vector
在末尾添加或删除元素的时间复杂度是 O(1),但在中间插入或删除元素的时间复杂度是 O(n)。 - 容量管理:
vector
的容量管理可以通过reserve()
和shrink_to_fit()
等函数进行优化,以减少内存重新分配的开销。