vector<int>ivec;
vector<double>ivec1;
第一个定义,类型是vector<int>,该类型即是含有若干int类型对象的vector,变量名为ivec,第二个类似。
注意:vector不是一种数据类型,而只是一个类模板,可以用开定义任意多个数据类型。vector类型的每一种都指定了其保存元素的类型。
1、vector对象的定义和初始话
vector类定义了好几种构造函数,用来定义和初始化vector对象。
vector<T>v1;——默认构造函数,v1为空
vectro<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<int>ivec1;
vector<int>ivec2(ivec1);
vector<string> svec(ivec1) //error类型不相符,不能赋值
可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存元素的个数,元素值指定每个元素的初始值。
vector<int> ivec4(10, 1) //10个元素,元素的值都为1
vector<string> svec(10,"hi!") //10个元素,元素的值为"hi!'
注意
:虽然可以对给定元素个数的vector对象预先分配内存,但是更有效的方法是先初始化一个空的vector对象,然后再动态地增加元素。(vector对象的重要属性就在于可以在运行时高效的添加元素)。
(2)值得初始化
如果没有指定元素的初始化式,那么标准库将自动提供一个元素初始值进行值初始化。这个由库生成的初始值将用来初始化容器中的每一个元素。如果vector保存内置类型的元素,那么标准库将用0值创建元素初始化。
2、vector对象的操作
vector标准库提供了许多类似string对象的操作。
v.empty()——如果为空返回true,否则返回false
v.size()——返回v中的元素个数
v.push_back(t)——在v的末尾加上一个值为t的元素
v[n]——返回v中位置为n的元素
(1)vector对象的size
成员函数size返回相应vector类定义的size_type的值。
注意:使用size_type类型时,必须指出该类型是哪里定义的。vector类型总是包括vector类定义的元素类型,如:
vector<int>::size_type
vector::size_type //error
(
2)向vector添加元素
push_back()操作接受一个元素值,并将它作为新元素添加到vector对象的后面,如:
string str;
vector<string>text;
while(cin>> str)
text.push_back(str);
(3)vector的下标操作
vector中的对象没有名字,可以按照vector中对象的位置访问他们。通常使用下标操作来获取元素(类似与string)
for(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
ivec[ix] = 0;
注意:vector的下标不能添加元素,如:
or(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
ivec[ix] =ix; //不合法
这里的ivec是空的vector对象,而且不能用于获取已经存在的元素。改正:
for(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
ivec.push_back(ix);
必须是已经存在的元素才能用于操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。