1. 头文件包含
使用vector
容器需要包含<vector>
头文件,示例如下:
#include <vector>
2. 定义与初始化
- 默认初始化:创建一个空的
vector
,元素类型可自行指定,例如定义一个存储int
类型元素的空vector
:
vector<int> v;
- 指定大小初始化:创建一个具有指定元素个数的
vector
,并可以用特定值初始化元素。例如,创建一个包含5个初始值为0的int
类型元素的vector
:
vector<int> v(5, 0);
- 通过初始化列表初始化:利用花括号括起来的初始值列表来初始化
vector
,像这样:
vector<int> v = {1, 2, 3};
- 拷贝初始化:从另一个已存在的同类型
vector
进行拷贝构造,例如:
vector<int> v1 = {1, 2, 3};
vector<int> v2(v1);
3. 元素访问
- 使用下标访问:通过
[]
操作符来访问元素,注意下标从0开始,并且要确保下标不越界,示例:
vector<int> v = {1, 2, 3};
int element = v[1]; // 访问第二个元素,值为2
- 使用
at()
函数访问:相较于[]
操作符,at()
函数会进行边界检查,越界时会抛出out_of_range
异常,例如:
vector<int> v = {1, 2, 3};
try {
int element = v.at(1); // 访问第二个元素,值为2
} catch (out_of_range& e) {
cerr << "下标越界: " << e.what() << endl;
}
- 通过迭代器访问:迭代器类似指针,可用于遍历
vector
中的元素,示例:
vector<int> v = {1, 2, 3};
for (vector<int>::iterator it = v.begin(); it!= v.end(); ++it) {
cout << *it << " ";
}
也可以使用更简洁的auto
关键字来简化迭代器的定义:
vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it!= v.end(); ++it) {
cout << *it << " ";
}
4. 修改元素
- 通过下标或
at()
函数修改:
vector<int> v = {1, 2, 3};
v[1] = 5; // 将第二个元素修改为5
v.at(2) = 6; // 将第三个元素修改为6
- 使用迭代器修改:
vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it!= v.end(); ++it) {
*it *= 2; // 将每个元素乘以2
}
5. 容器大小相关操作
- 获取元素个数:使用
size()
函数,例如:
vector<int> v = {1, 2, 3};
cout << "元素个数: " << v.size() << endl;
- 判断是否为空:通过
empty()
函数来判断,返回true
表示为空,false
表示不为空,示例:
vector<int> v;
if (v.empty()) {
cout << "vector为空" << endl;
}
- 改变容器大小:使用
resize()
函数,可增大或缩小vector
的大小。若增大,新元素会按默认构造或者指定值初始化(如果有提供初始化值),例如:
vector<int> v = {1, 2, 3};
v.resize(5); // 扩展为5个元素,新增元素默认初始化
v.resize(7, 8); // 扩展为7个元素,新增元素初始值为8
6. 插入与删除元素
- 在末尾插入元素:使用
push_back()
函数,例如:
vector<int> v;
v.push_back(1);
v.push_back(2);
- 在指定位置插入元素:利用
insert()
函数,可指定插入位置的迭代器以及要插入的元素值或元素范围,示例:
vector<int> v = {1, 3};
auto it = v.begin() + 1; // 在第二个元素前插入
v.insert(it, 2); // 插入单个元素
vector<int> other = {4, 5};
v.insert(v.end(), other.begin(), other.end()); // 插入另一个vector的元素范围
- 删除末尾元素:使用
pop_back()
函数,例如:
vector<int> v = {1, 2, 3};
v.pop_back(); // 删除最后一个元素
- 删除指定位置元素:通过
erase()
函数,指定要删除元素的迭代器或者迭代器范围来删除元素,示例:
vector<int> v = {1, 2, 3};
auto it = v.begin() + 1; // 删除第二个元素
v.erase(it);
也可以删除一段元素:
vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 1, v.begin() + 3); // 删除第二个到第四个元素(左闭右开区间)
7. 遍历操作
除了前面提到的使用迭代器遍历,还可以使用范围for
循环来简洁地遍历vector
中的元素,例如:
vector<int> v = {1, 2, 3};
for (int element : v) {
cout << element << " ";
}
8. 其他操作
- 清空容器:使用
clear()
函数,它会移除所有元素,示例:
vector<int> v = {1, 2, 3};
v.clear();
- 交换两个
vector
的内容:利用swap()
函数,例如:
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
v1.swap(v2);