vector可以理解为是一个动态数组, 大小和会随着容器内存储的数据数量来动态变化
创建vector
vector<int> v; // 创建一个空的vector, 元素类型为int
vector<int> v1(10); // 创建一个含有10个元素的vector, 所有元素默认初始化为0
vector<int> v2(10, 36); // 创建一个含有10个元素的vector, 所有元素初始化为36
vector<int> v3 = {1, 2, 3, 4, 5}; // 使用列表初始化一个vector
// 另一种初始化方式
vector<int> v4;
v4.resize(n); // 容器长度为 0 ~ n - 1
访问元素
int x = v[0]; // 访问第一个元素
int y = v.at(1); // 使用at()函数访问第二个元素,at()会进行边界检查
v.rbegin() // 反向迭代器, 指向最后一个元素
*v.rbegin() // 取出最后一个元素的值
++ v.rbegin() // 指向倒数第二个元素; ++ 操作是从右向左的
修改元素
v[0] = 10; // 修改第一个元素, O(1)
v.push_back(10); // 在vector末尾添加一个元素, O(1)
v.pop_back; // 删除末尾元素, O(1), 请注意保证vector非空
遍历vector
// 下标遍历
for(int i = 0; i < v.size(); ++ i){
cout << v[i] << ' ';
}
cout << endl;
// 或者使用范围for循环
for(int elem : v){
cout << elem << ' ';
}
cout << endl;
// 如果 vector 存的是 pair 类型或者结构体, c++17以上版本可以使用结构化绑定来枚举
vector<pair<int, int>> v_pair;
for(const auto &[a, b] : v_pair){ // &表示**引用枚举**, 不加&就是默认**拷贝枚举**
cout << x << ' ' << y << '\n';
}
查询vector的大小
// v.size()返回的是 unsigned int 类型, 所以不要进行v.size() - 1的操作
int size = v.size(); // 返回vector中元素的数量
// 判断vector是否为空
if(v.empty()) ...
if(v.size()) ...
清空vector
v.clear(); // 移除所有元素, size变为0, 时间复杂度O(n)