1、标准库类型vector表示对象的集合,其中所有对象的类型必须相同。因为vector容纳着“容纳着”其他对象,所以也常被称作容器。
2、想要使用vector必须包含适当的头文件。
#include <vector>
using std::vector;//其定义在命名空间std中
3、vector是一个类模板。当使用模板实例化类时,需要提供额外的信息来指定编译器把模板实例化成什么样的类,并且需要提供哪些信息由模板自身决定。提供信息的方式总是这样:即在模板名字后面跟一对尖括号,在括号内放上信息。
对于vector来说,提供的信息是vector内所存放对象的类型。
vector<int> i;
4、vector能容纳绝大多数类型的对象作为其元素,但因为引用不是对象,所以不存在包含引用的vector。除此之外绝大多数内置类型和类类型都可以构成vector对象,甚至组成vector的元素也可以是vector。
但是需要指出,在早期版本的C++标准中如果vector的元素还是vector或者其他模板类型,则其定义的形式与现在的C++11新标准略有不同。
过去 | vector<vector<int>"空格"> |
现在 | vector<vector<int>> |
5、和任何一种类类型一样,vector模板控制着定义和初始化向量的方法。参考之前的文章《C++中的初始化》:
5.1、直接初始化:vector<string> i2(i1);//这里只能用另一个vector对象作为初始值
5.2、拷贝初始化:vector<string> i2=i1;//这里只能用另一个vector对象作为初始值
5.3、默认值初始化:vector<int> i;//空vector对象
5.4、重复序列初始化:vector<string> i(5,"asd");//asdasdasdasdasd
5.5、值初始化:可以只提供vector对象容纳的元素数量而略去初始值。此时库会创建一个值初始化的元素初值,并把它赋给容器中的所有元素。这个初值由vector对象中元素的类型决定。
vector<int> i(10);//10个元素,每个都初始化为0
vector<string> j(10);//10个元素,每个都是空string对象
5.5.1、有些类要求必须明确提供初始值,如果vector对象中元素的类型不支持默认初始化,我们就必须提供初始的元素值。
5.5.2、使用值初始化时,只能使用直接初始化。
5.6、列表初始化:vector<int> i{0,1,2,3};或vector<int> i={0,1,2,3}; //用列表中元素的拷贝初始化i
想要列表初始化vector对象,花括号里的值必须与元素类型相同。否则在编译器确认无法执行列表初始化时,便会尝试用值初始化或重复序列初始化。
vector<string> i{10};//10个0
vector<string> j{10,'s'};10个s
最后再次强调,如果想使用字面量来初始化vector对象的话,只能考虑使用重复序列初始化及列表初始化。