顺序容器——vector

一、介绍

标准库类型vector表示对象的集合,其中所有对象的类型相同。

集合中的每个对象都有一个与之对应的索引,索引用于访问对象。

vector是一个类模板,不是类型。由vector生成的类型必须包含vector中元素的类型,比如 vector<int>

要想使用vector,必须包含适当的头文件。如下:

# include <vector>
using std::vector;

vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector

二、定义和初始化vector对象

操作 说明
vector v1 v1是一个空vector,它潜在的元素是T类型的,执行默认初始化
vector v2(v1) v2中包含有v1所以元素的副本
vector v2 = v1 等价于v2(v1), v2中包含有v1所有元素的副本
vector v3(n, val) v3包含了n个重复的元素,每个元素的值都是val
vector v4(n) v4包含了n个重复地执行了值初始化的对象
vector v5 v5包含了初始值个数的元素,每个元素被赋予相应的初始值
vector v5 = 等价于v5

三、添加元素

使用场景:先创建一个空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 = 用列表中元素的拷贝替换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语句。

posted @ 2021-09-19 19:54  砚台是黑的  阅读(35)  评论(0编辑  收藏  举报