一,定义
标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中每个对象都有与之对应的索引,索引用于访问对象。因为vector“容纳着”其他对象,所以它也被称为容器。
vector是一个类模板。
模板本身不是类或者函数,可以看作是编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化,当使用模板时,需要指出编译器把类或函数实例化成何种类型。
vector<int> ivec; //ivec保存int类型的对象 vector<Sales_item> Sales_vec; //保存Sales_item类型的对象 vector<vector<string>> file; //该向量的元素是vector对象
上述例子中,编译器根据模板vector生成了三种不同的类型:
vector<int>,vector<Sales_item>,vector<vector<string>>
二,初始化vector对象
初始化vector对象的拷贝方法和string类似,可参考我的上一篇博客C++标准库类型string_Lv547的博客-CSDN博客
在这里,我们着重介绍它的列表初始化方法。示例如下:
vector<int> v1(10); //v1有10个元素,每个数的值都是0 vector<int> v2{10}; //v2有1个元素,值是10 vector<int> v3(10,1); //v3有10个元素,每个数的值都是1 vector<int> v4{10,1}; //v4有2个元素,值分别是10和1
当我们使用圆括号“( )”时,提供的值是用来构造vector对象。
如v1的初始值说明vector对象的容量,v3的初始值说明了vector对象的容量和元素的初值。
当我们使用花括号“{ }”时,初始化过程会将提供的值当成元素初始值的列表来处理。(即列表初始化),只有当无法执行列表初始化时才会考虑其他初始化方式。
上例中,v2和v4提供的值都只能作为元素的值,所以它们都会执行列表初始化,即v2包含一个元素,v4包含2个元素。
另外,如果初始化时使用了花括号,但提供的值又不能用来列表初始化,就需要考虑用这样的值构造vector对象了。
vector<string> v5{"hi"}; //列表初始化:v5有一个元素 vector<string> v6("hi"); //错误:不能用字符串字面值构建vector对象 vector<string> v7{10}; //v7有10个默认初始化的值 vector<string> v8{10,"hi"}; //v8有10个值为"hi"的元素
上例中,只有v5是列表初始化。
想要列表初始化vector对象,花括号里的值必须与元素类型相同。
故显然不能用int初始化string对象,故v7,v8提供的值不能作为元素的初始值。