标准库vector
零.前言
标准库vector
表示对象的集合,其中所有的对象类型都相同,集合中的每个对象都有一个与之对应的索引。vector
也被常称作索引
。
如果使用vector
,需要添加头文件#include <vector>
和using std::vector
。
C++有类模板,也有函数模板,而这个vector
就是个类模板。它本身不是一个类或函数,而只是一份让编译器生成类的“说明书”,而编译器将模板创建类或函数的时候,叫做实例化
。所以,当我们使用模板的时候,需要指出编译器将其实例化为什么类型。形如:
vector<int> a;
vector<student> b;
vector<vector<string>> file;
老版本的C++编译器需要把vector<vector<string>>
后面多添加一个空格,写成vector<vector<string> >
这种形式。
而对于vector
的理解,我们可以把它和前面知道的数组和string来对比。而vector
的目的是“运行时高效快速地添加元素”,所以我们并不需要为vector
指定大小、容量。
一.定义和初始化vector对象
1.初始化
以下是vector
的常用初始方法:
vector<T> v1;
vector<T> v2(v1);
vector<T> v2 = v1;
vector<T> v3(m, val);
vector<T> v4(n);
vector<T> v5{a, b, c, d, e};
vector<T> v6 = {a, b, c, d, e};
2.列表初始化vector对象
如果使用列表初始化vector
只能使用{}
3.创建指定数量的元素
就形如:
vector<string> kannas(520, "kanna");
4.值初始化
如果我们没有为它提供初始值,那么vector
会创建一个值初始化的
元素初值,这个值由其类型决定:比如int
就自动设置为0,sting
就执行其默认初始化(空字符串)。
vector<int> numbers(10); //这里创建了一个由10个0组成的vector
但也有特殊情况,必须提供初始值:
- 类是必须要初始值才能够被初始化的。
- 不支持默认初始化的类
5.分清{}与()
vector<int> v1(10); //有10个0元素
vector<int> v2{10}; //有1个10元素
vector<int> v3(10, 1); //有10个1元素
vector<int> v4{10, 1}; //有两个元素,分别为10、1
当然,还有些特殊情况,编译器能够帮你判断,比如在vector<string>
的初始化中,添加了int
类型的值:
vector<string> kannas{10}; //有10个空字符串
vector<string> kannas{10, "kanna"}; //这个代码还是对vector生成了10个kanna
二.向vector对象中添加元素
一般来说,向vector
的末尾添加元素的话,调用其方法.push_back
即可。
这是一段生成 由0~99组成的vector
vector<int> v2;
for (int i = 0; i < 100; i++)
v2.push_back(i);
三.其他vector操作
1.操作
和string
差不多,vector
也支持empty()、size()、!=、==
……
当然,size
还是返回的vector<int>::size_type
类型
2.不能用下标形式添加元素
也是就是[]
里的数,还是不能>=.size()
,这不等同于数组。下标运算符只能访问已存在的元素,不可添加元素