首页 > 代码库 > 标准库类型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,然后的当运行时获取到元素的值后再逐一添加。