0、什么是vector(容器)
vector是同一种类型对象的集合,负责管理与存储元素相关的内存。vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<string>,vector<int>都是数据类型。在使用vector之前,必须包含相应的头文件。假设下文都做了声明。
#include<vector>
using std::vector;
1、vector对象的定义和初始化
主要有一下四种格式:
vector<T> v1; //vector保存类型为T的对象。默认构造函数v1为空
vector<T> v2(v1); //v2是v1的副本
vector<T> v3(n,i); //v3包含n个值为i的元素
vector<T> v4(n); //v4含有n个元素,元素的初始值具体为什么,取决于元素的类型,如int类型默认初始化为0(同v1初始化)
如:
vector<int> v1(10,-1); //10 elements,each initialized to -1
vector<string> v2(10,"hi"); //10 strings,each initialized to "hi"
vector<int> v3(10); //10 elements,each initialized to 0
vector<string> v4(10); //10 strings,each an empty string
2、vector对象的操作
下边这段代码包含了vector对象的定义,size,添加元素和下标操作。
int main()
{
string word;
vector<string> text; //定义,空的empty
while(cin>>word){
text.push_back(word); //添加操作
}
for(vector<string>::size_type i=0;i!=text.size();++i){ //size操作
for(vector<string>::size_type index = 0; index != text[i].size(); ++index)
text[i][index]=toupper(text[i][index]);
}
for(vector<string>::size_type i=0;i!=text.size();++i){
cout<<text[i]<<" "; //下标操作
if(i%8==7)
cout<<endl;
}
return 0;
}
2.1 size操作
成员函数size返回相应vector类定义的size_type的值。在使用size_type类型时,必须指出类型是在哪里定义。vector类型总是包括vector的元素类型。
vector::size_type //error
vector<int>::size_type; //ok
2.2 向vector添加元素
vector对象的一个重要属性就是可以在运行时高效地添加元素,因此在元素值已知的情况下,最好是动态地添加元素。
一个问题,空vector类型的v,添加操作后,第一个添加的元素是v[0]还是v[1]?下边一段代码:
string word("value");
vector<string> v;
cout<<v.size()<<endl; //output: 0
v.push_back(word);
cout<<v.size()<<endl; //output: 1
空vector的大小是0。定义一个空vector是并没有分配内存。因此,对一个空vector进行添加操作,第一个添加的元素可以通过下标操作v[0]读取出来。
2.3 下标操作
注意三点:1)下标操作不能添加元素;2)必须是已经存在的元素才能使用下标进行索引;3)下标必须是常量(表达式)。
vector<int> v(10); //vector with 10 elements
cout<<v[0]<<endl; //ok
cout<<v[10]<<endl; //error,v has elements 0..9