首页 > 代码库 > 标准库类型vector

标准库类型vector

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

要想使用vector,必须包含适当的头文件。#include<vector>

C++语言既有类模板,也有函数模板 ,其中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。除此之外,其他大多数(非引用)内置类型和类类型都可以构成vector对象,甚至组成vector的元素也可以是vector。

 

定义和初始化vector对象

和任何一种类类型一样,vector模板控制着定义和初始化向量的方法。

初始化vector对象的方法  

vector<T> v1      v1是一个空vector,它潜在的元素师T类型的,执行默认初始化

vector<T> v2(v1)    v2中包含有v1所有元素的副本

vector<T> v2=v1    等价于v2(v1),v2中包含有v1所有元素的副本

vector<T> v3(n,val)   v3包含了n个重复的元素,每个元素的值都是val

vector<T> v4(n)      v4包含了n个重复地执行了值初始化的对象

vector<T> v5{a,b,c....} v5包含了初始值个数的元素,每个元素被赋予相应的初始值

vector<T> v5={a,b,c...} 等价于v5{a,b,c...}

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

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

看起来空vector好像没什么用,但是很快我们就会知道程序在运行时可以很高效地往vector对象中添加元素。事实上,最常见的方式就是先定义一个空vector,然后的当运行时获取到元素的值后再逐一添加。