一. 简介
在 C 语言中假如想要界说同一类型的元素序列,能够运用数组来完结。例如 int num[10] = {1,2,3,4,5,6,7,8,9,10} 代表界说了一个巨细为 10 的,寄存 int 类型目标的数组。运用数组的缺乏清楚明了:在界说的时分有必要初始化一个巨细,假如在运用的过程中发现这个数组巨细缺乏,也无法对这个数组扩容;假如一开始将数组界说得很大,又简单形成空间的糟蹋。在 C++ 规范库中就供给了一种可变巨细的数组,也便是 vector 容器。
vector 是模板类而不是某种详细类型,也便是说 vector 能够寄存不同类型的目标,就像能够界说不同类型的数组相同。假如要创立一个能够寄存 int 类型的 vector 目标,能够运用 vectorivec 界说。
留意:运用 vector 容器的时分需求包括头文件而且 using std::vector。A8站源码交易平台
二. 界说和初始化vector目标
下面的 T 在实际运用中代表一种详细类型,能够是 int,double,short,也能够是自界说的类类型。留意 vector 只能寄存目标,不能寄存引证,所以 vector
vectorv1; // v1 是一个空的 vector
vectorv2(v1); // 将 v1 的每个元素目标复制给 v2,v2 是 v1 的一个副本
vectorv3 = v1; // 等价于 vectorv2(v1)
vectorv4(10,1); // v4 包括了 10 个 int 类型的元素,这些元素初始值都为 1
vectorv5(10); // v5 包括了 10 个类型为 T 的元素,按 T 类型进行默许初始化, 假如 T 是自界说的类类型,将履行
// 该类的结构函数,假如是内置类型(比方 int),这些元素将被主动设为 0
vectorv6{a,b,c...}; // v6 包括了 {a,b,c...} 列表个数的元素,每个元素被赋予相应的初始值,如 v6[0] 运用 a 进行初始
// 化,v6[1] 运用 b 进行初始化
vectorv7 = {a,b,c...}; // 等价于 vectorv6{a,b,c...}
三. vector的常用操作
假定现在界说了一个 vectorivec;
(一)判别vector目标是否不包括任何元素
ivec.empty(); // 调用目标的 empty 成员函数,假如为空则回来 true,不然回来 false。
(二)获取vector目标中元素的个数
ivec.size(); // 回来 vector 目标中元素的个数,留意不能运用 length,string 目标中能够运用 length。
(三)往vector目标尾部增加元素

(四)vector中元素的刺进
1. ivec.insert(pos, elem); 在 pos 方位前刺进元素 elem。
2. ivec.insert(pos, n, elem); 在 pos 方位前刺进 n 个 elem 元素。
3. ivec.insert(pos, begin, end); 在 pos 方位前刺进 [begin,end) 区间的元素。
(五)vector中元素的删去
1. 铲除 vector 中的一切元素。ivec.clear();
2. 删去 vector 指定区间 [begin,end) 的元素。ivec.erase(begin, end);
3. 删去 vector 中迭代器指定方位的元素。ivec.erase(it); 回来下一个数据的方位,能够运用 it 去接纳。
(六)拜访vector目标的元素值
int front_val = ivec.front(); // 获取头部元素
int back_val = ivec.back(); // 获取尾部元素
留意:front() 和 back() 回来的是一个引证,能够当左值,也便是说能够经过 ivec.front() = 3 给该 vector 目标的头部元素赋值。
int val1 = ivec[n]; // 获取 ivec 下标为 n 的元素,要确保 ivec 的巨细大于 n,不然会呈现未界说的行为,并不抛出反常
int val2 = ivec.at(n); // 获取 ivec 下标为 n 的元素,要确保 ivec 的巨细大于 n,不然程序会抛出反常
四. vector目标是怎么增加的
vector 容器中的目标是接连存储的,而容器的巨细可变,当你往容器中刺进一个新元素,可是现已没有空间包容该新元素时,容器就有必要分配新的内存空间来保存已有元素和新元素,将已有元素从旧方位移动到新空间,然后增加新元素,再开释旧的存储空间。假如咱们每增加一个新元素容器都要履行这样的一遍流程,那么功率会十分低下,为了防止这种价值,规范库完成者采取了能够削减容器空间重新分配次数的战略,一般是重新分配一片比现有需求更大的内存空间,容器预留这些空间作为备用。A8站源码交易平台
五. vector 运用场景
vector 容器在尾部刺进和移除元素十分快速,可是在中部刺进和删去元素会比较耗时,所以假如你剖析运用场景发现需求快速随机读取,而且只会在尾部操作元素,这时分能够运用 vector,假定现在需求做一个排队体系,那么运用 vector 容器就十分不适用了。