一、介绍
标准库类型vector表示对象的集合,其中所有对象的类型相同。
集合中的每个对象都有一个与之对应的索引,索引用于访问对象。
vector
是一个类模板,不是类型。由vector
生成的类型必须包含vector
中元素的类型,比如 vector<int>
。
要想使用vector
,必须包含适当的头文件。如下:
# include <vector>
using std::vector;
vector
能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector
。
二、定义和初始化vector
对象
操作 | 说明 |
---|---|
vector |
v1是一个空vector,它潜在的元素是T类型的,执行默认初始化 |
vector |
v2中包含有v1所以元素的副本 |
vector |
等价于v2(v1), v2中包含有v1所有元素的副本 |
vector |
v3包含了n个重复的元素,每个元素的值都是val |
vector |
v4包含了n个重复地执行了值初始化的对象 |
vector |
v5包含了初始值个数的元素,每个元素被赋予相应的初始值 |
vector |
等价于v5{a, b, c...} |
三、添加元素
使用场景:先创建一个空vector
,然后在运行时再利用成员函数push_back
向其中添加元素。
vector<int> v2;
for (int i = 0; i != 100; ++i) {
v2.push_back(i); // 依次把整数值放到v2的尾部
}
注意:范围for
语句内不应改变其所遍历序列的大小。
四、其他操作
操作 | 说明 |
---|---|
v.empty() | 如果v不包含任何元素,返回真;否则返回假 |
v.size() | 返回v中元素的个数 |
v.push_back(t) | 向v的尾部添加一个值为t的元素 |
v[n] | 返回v中第n个位置上元素的引用 |
v1 = v2 | 用v2中元素的拷贝替换v1中的元素 |
v1 = {a, b, c...} | 用列表中元素的拷贝替换v1中的元素 |
v1 == v2 | v1和v2相等当且仅当它们的元素数量相同且对应位置的元素值都相同 |
v1 != v2 |
与 v1 == v2相反 |
< 、<= 、> 、>= |
以字典顺序进行比较 |
遍历vector
中元素
vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
for (auto &i : v) { // 对于v中的每一个元素,注意i是一个引用
i *= i; // 求元素值的平方
}
for (auto i : v) {
cout << i << " "; // 输出该元素
}
cout << endl;
不能用下标形式添加元素
vector<int> ivec; // 空vector对象
for (decltype(ivec.size()) ix = 0; ix != 10; ++ix) {
ivec[ix] = ix; // 严重错误:ivec中不包含任何元素
}
注意:vector对象的下标运算符可用于访问已存在的元素,而不能用于添加元素。
确保下标合法的一种有效手段就是尽可能使用范围for语句。