vector类模板
vector表示相同对象的集合,每个对象都有一个索引,又成之为容器。
vector不是一种类型,而是一个类模板。顾名思义,模板本身不是一个类或函数,但根据提供类型的不同,可以生成不同类型的类或函数,这一过程叫做实例化。
因此,在使用vector模板时,我们要给出对象的类型。
#include <vector>
using namespace std;
vector<int> a; //对象为int类型
vector<vector<string>> s; //对象为vector对象
一、定义和初始化vector对象
1. 普通初始化
vector<int> a1; //a1为空
//以下两句等价
vector<int> a2 = a1;
vector<int> a3(a2);
2. 列表初始化
vector<string> s{};
//以下两句等价
vector<string> s1 = { "fancy", "love", "you" };
vector<string> s2{ "fancy", "love", "you" };
3. 值初始化
vector<int> a1(10,5); //vector对象内容为10个5
vector<string> s1(5,"fancy"); //vector对象内容为5个fancy
vector<string> s1(5); //vector对象为5个,会调用对象的默认构造函数
要注意( )和{ }的区别哦~
二、向vector对象中添加元素
在实际应用中,当vector对象所有元素值都一样时,才进行初始化;否则,将vector对象定义为空,在实际运行中添加元素(由于vector能在运行中高效快速地添加元素)。
vector提供了push_back( name )函数使我们添加元素。顾名思义,就是将元素压入 vector对象的尾端。
vector<int> num;
for (int i = 0; i < 100; ++i)
num.push_back(i);
for (auto c : num)
cout << c << ' ';
cout << endl << endl;
值得注意的是,在使用范围for循环时,不可改变遍历序列的大小(即不能插入和删除元素)。这是因为在范围for循环开始时,已经设定好了遍历序列的头尾两端,若进行插入和删除,会使得循环无法正常运行。
三、其他vector操作
1.访问元素
同string类型一样可根据范围for循环和下标访问。
但是我们要指出的是,下标只可访问存在的元素,因此不能利用下标添加元素。
2.empty( )和size( )
同string类型一样,值得注意的是vector对象中size( )的返回值类型为 vector :: size_type。
3.比较vector对象
同string类型一样,前提是vector对象中的元素可比较。