1、vector标准库类型的认识

标准库类型vector表示对象的集合,其中所有的对象类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector容纳者其他对象所以他也被称作容器。

使用vector之前必须包含适当的头文件。

include<vector>

using std::vector

在C++中既有函数模板,也有类模板。其中vector是一个类模板。只有对C++有了相当程度的理解才能写出模板。

模板本身不是类或者函数,相反可以将模板作为编译器生成类或者函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化,当使用模板时需要指出编译器应把类或函数实例化成何种类型。

对于类模板来说我们通过提供一些额外的信息来制定模板到底实例化成什么样的类,需要哪些信息由模板决定。提供信息的方式:在模板名字后面跟一对尖括号在括号内部放置信息。

1
vector<int>ievc;//ievc保存int类型的对象
1
vector<sales_item>sales_vec;//保存sales_item类型的对象
1
vector<vector<string>>file;//该向量的元素是vector对象

vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型例如:vector<int>

因为引用不是对象,所以不存在包含引用的vector对象。除此之外,绝大多数内置类型和类类型都可以构成vector对象。

2、定义和初始化vector对象

(1)初始化vector对象的方法:

vector<t>v1 v1是一个空vector,他潜在的元素是T类别的,执行默认初始化
vector<t>v2(v1) v2中包含有v1所有元素的副本
vector<t>v4(n) v4包含了n个重复执行了值初始化的对象
vector<t>v5(a,b,c....) v5包含了初始值个数的元素每个元素都被赋予相应的初始值

可以默认初始化vector对象从而创建一个指定类型的空vector:

vector<string>svec;//默认初始化svec并不含任何元素。

列表初始化:

 

1
vector<string>articles={"a","an","the"};

这个vector对象包含了三个元素。

创建指定数量的元素:

还可以用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象:

1
vector<int>ivec(101//10个int类型的元素每个都被初始化vector对象

值初始化:可以只提供vector对象容纳元素数量而不用滤去初始值。此时库会创建一个值初始化元素初值。

判断是列表初始值还是元素数量:

若是用的圆括号,提供用以构造vector对象的。若是花括号,是列表初始化。

不能使用字符串字面值构建vector对象。

vector初始化的知识点:

(1):引用不可以成为vector的元素,因为其不是对象。

(2):可以用花括号初始化每一个值。

(3):可以用括号指定元素个数或相同的元素值。

(4):只能使用直接初始化,不可以使用拷贝初始化(vector之间的拷贝是可行的,但要保证类型相同)

2、向vectpr对象中添加元素:

先创建一个空的vector对象,然后再运行时再利用vector的成员函数push_back向其中添加元素。push_back把一个值当成vector对象的尾元素“压到(push)vector对象的尾端(back)”

3、其他vector操作:

除了push_back操作之外,大多数都和身体日那个的相关操作类似。

v.empty() 如果v为空,返回真
v.size() 返回v中元素的个数
v.push_back() 向v的尾端添加添加元素
v[n] 返回v中第n个位置上的元素
v1=v2 用v2中的元素的拷贝替换v1中的元素
v1==v2 判断v1与v2是否相等

访问vector中的对象和访问string对象的方法差不多,也是通过元素在vector对象中的位置。例如可以使用范围for语句处理vector对象中的所有元素。

计算vector内对象的索引:

vector对象的下标也是从0开始记起。下标的类型是相应的size_type类型。只要vector对象不是一个常量,就能向下标运算符返回的元素赋值。

注意:vector对象可以用于访问已经存在的元素,而不能用于添加元素。

只能对明确已知存在的元素执行下标操作。