vector是同一种类型的对象的集合,每个对象都有一个对应的证书索引值。和string对象一样,标准库将负责管理与存储元素相关的内存,我们把vector称为容器,因为他可以包含其他对象。一个容器中的所有对象必须是同一种类型
使用vector之前,必须包含相应的头文件。
vector是一个类模板(class template)使用模板可以编写一个类定义或函数定义,而用于多个不同数据类型。因此 我们可以定义保存string对象的vector,或保存int值得vector 又或是保存自定义的类类型对象;
声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型。
vector<int> ivec;
和其他变量一样 定义vector对象 要指定类型和一个变量的列表。上面的第一个定义,类型是vector<int> 该类型即是含有若干int类型对象的vector,变量名为ivec。
1.vector对象的定义与初始化
vector类定义了好几种够着函数 用来定义和初始化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个副本
1 创建确定个数的元素
若要创建非空的vector对象,必须给初始化元素的值。当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应的副本 但这两个vector对象必须保存同一种元素类型
vector<int> ivec1;
vector<int> ivec2(ivec1);
vector<string> svec(ivec1);这个是错误的元素类型不同
vector<int> ivec4(10,-1);创建一个包含10个元素 每个元素都初始化为-1
vector<string> svec(10,"hi!");10个每个都初始化为"hi!"
2 值初始化
如果没有对值进行初始化 那么标准库将自行提供一个元素初始值进行值初始化。这个库生成的初始值将用来初始化容易中的每个元素。具体取决于vector中存储的数据类型。
vector<int> ivec(10) //初始化10个0
如果vector保存的是含有构造函数类类型的元素,标准库将用该类型的默认构造函数初始化
vector<string> svec(10)//初始化10个空串
第三种可能性 元素类型可能没有定义任何构造函数的类类型。这种情况下标准库仍然产生一个带初始值的对象,这个对象的每个成员进行了初始化。
3vector对象的操作
v.empty()
v.size()
v.push_back(t) 在末尾中加入一个值为t的元素
v[n]返回v中位置为n的元素
v1=v2把v1中替换为v2的元素的副本
v1==v2 如果v1与v2相等 则返回true
1vector的size
empty和size 操作类似于string类型的相关操作 成员函数size返回相应的vector类定义的size_type的值
2.向vector中添加元素
string word;
vector<string> text;
text.push_back(word);
3.vector的下标操作
for(vector<int>::size_type ix=0;ix!=ivec.size();++ix)
ivec[ix]=0;
4.下列操作不添加元素
vector<int> ivec;
for(vector<int>::size_type ix=0;ix!=10;++ix)
{
ivec[ix]=ix;
}
上面的操作是不会添加进入元素的