这里仅仅对vector做简要的总结。后续会对该容器进行详细介绍。如下图,将以三个方面对vector容器进行简要介绍。
1.vector容器的特点。
1)vector是一个类模板,不是一个数据类型。因此可以用vector(类模板)定义多种数据类型。
2)vector是一个顺序容器,且容器内的元素类型必须一致。因此很多情况下可以使用vector代替数组。
3)vector容器长度支持动态增长。数组不可以。
4)可以以下标索引的方式访问vector容器内的元素。
2.vector容器的声明、定义以及初始化。
1)声明。
vector容器的声明必须包含其头文件和命名空间。即# include <vector> using std::vector;
2)定义及初始化
vector定义及初始化有四种方式。
# include <iostream>
# include <string>
# include <vector>
using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;
int main()
{
vector<string> v1;//调用默认构造函数,
vector<string> v2(v1);//调用拷贝构造函数
vector<string> v3(5,"China");//v3包含5个string类对象,对象的值为China
vector<string> v4(5);//v4包含5个的string类对象,对象的值为空
return 0;
}
最好的方式为第一种,后面介绍其初始化方式。
3)vector对象的操作
第一种:vector支持算术操作运算符。==、!= 、<、 > 、<= 、>= 。与string类型所支持的这些操作符是一样的。
第二种:支持push_back、empty和size三种操作。push_back:向容器里末尾添加元素。
第三种:支持下标索引操作。下标索引操作不用于添加元素,并且下标的索引的元素必须存在。
vector添加元素和输出元素。
# include <iostream>
# include <string>
# include <vector>
using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;
int main()
{
string s;
vector<string> v1;//调用默认构造函数
vector<string> v2(10);//vector容器里含有10个空的string类对象。
v2.push_back("fas");//push_back将元素放在容器尾。
cout<<v2.size()<<endl;
v2[0] = "china";//由于vector容器内元素都是string类型,因此支持string的操作。
cout<<v2[0]<<endl;
//向容器里添加元素.
int n;
cout<<"输入添加至容器v1元素的个数:";
cin>>n;
for(vector<string>::size_type i = 0;i != n;++ i)
{
cin>>s;
v1.push_back(s);//向容器尾添加元素。
}
//遍历容器里的元素。用迭代器遍历容器。
cout<<"容器v1的元素为:";
for(vector<string>::iterator iter = v1.begin();iter != v1.end();++ iter)
{
cout<<*iter<<" ";
}
cout<<endl;
cout<<"容器的大小为:"<<v1.size()<<endl;
//下标索引遍历容器。这里需要注意ix!=v1.size();因为vector容器支持长度动态增长,因此这里遍历时
//养成好的习惯写成v1.size();
cout<<"容器v1的元素为:";
for(vector<string>::size_type ix = 0;ix != v1.size();++ ix)
{
cout<<v1[ix]<<" ";
}
cout<<endl;
cout<<"容器的大小为:"<<v1.size()<<endl;
return 0;
}
注意下标索引的情况,不能索引不存在的容器元素。特别这种情况:
vector<int> v;
v[0] = 12;无论v[0]作为左值还是右值,均不可以。
用几种方法定义vector对象,给定10个整型元素,每个元素的值为10。
# include <iostream>
# include <string>
# include <vector>
using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;
int main()
{
//第一种
vector<int> v1(10,42);
vector<int> v2;
vector<int> v3(10);
vector<int> v4;
//第二种
for(vector<int>::size_type ix = 0;ix != 10;++ ix)
{
v2.push_back(42);
}
//第三种
for(vector<int>::iterator iter = v3.begin();iter != v3.end();++ iter)
{
*iter = 42;
}
//第三种
for(int i = 0;i < 10;++ i)
{
v4.push_back(42);
}
return 0;
}