vector的操作
empty()
如果 v 为空,则返回 true, 否则返回 false 。
v . size ()
返回 v 中元素的个数。
v . push _ back ( t )
在 v 的末尾增加一个值为 t 的元素。
v [ n ]
返回 v 中位置为 n 的元素。
v1 = v2
把 v1 的元素替换为 v2 中元素的副本。
v1 == v2
如果 v1 与 v2 相等,则返回 true 。
!=, <, <=, >, >= 保持这些操作符惯有的含义。
1.vector对象的size
empty和size操作类似于string类型的相关操作。成员函数size返回相应vector类定义的size_type的值。
提示:使用size_type类型时,必须指出该类型是在哪里定义的。vector类型总是包括vector的元素类型:
vector<int>::size_type//ok
vector::size_type//error
2.向vector添加元素
push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入(push)”到vector对象的“后面(back)”:
//read words from the standard input and store the elements in a vector
stringword;
vector<string>text; //emptyvector
while(cin>>word)
{
text.push_back(word); //appendwordtotext
}
该循环从标准输入读取一系列string对象,逐一追加到vector对象的后面。首先定义一个空的vector对象text。每循环一次就添加一个新元素到vector对象,并将从输入读取的word值赋予该元素。当循环结束时,text就包含了所有读入的元素。
3.vector的下标操作
vector中的对象是没有命名的,可以按vector中对象的位置来访问它们。通常使用下标操作符来获取元素。vector的下标操作类似于string类型的下标操作。
vector的下标操作符接受一个值,并返回vector中该对应位置的元素。vector元素的位置从0开始。下例使用for循环把vector中的每个元素值都重置为0:
//reset the elements in the vector to zero
for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix)
ivec[ix]=0;
和string类型的下标操作符一样,vector下标操作的结果为左值,因此可以像循环体中所做的那样实现写入。另外,和string对象的下标操作类似,这里用size_type类型作为vector下标的类型。
提示: 在上例中,即使ivec为空,for循环也会正确执行。ivec为空则调用size返回0,并且for中的测试比较ix和0。第一次循环时,由于ix本身就是0,则条件测试失败,for循环体一次也不执行。
4.下标操作不添加元素
初学C++的程序员可能会认为vector的下标操作可以添加元素,其实不然:
vector<int>ivec; //emptyvector
for(vector<int>::size_typeix=0;ix!=10;++ix)
ivec[ix]=ix; //disaster:ivec has no elements
上述程序试图在ivec中插入10个新元素,元素值依次为0到9的整数。但是,这里ivec是空的vector对象,而且下标只能用于获取已存在的元素。
这个循环的正确写法应该是:
for(vector<int>::size_typeix=0;ix!=10;++ix)
ivec.push_back(ix); //ok:adds new element with value ix
必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。
警告:仅能对确知已存在的元素进行下标操作
对于下标操作符([]操作符)的使用有一点非常重要,就是仅能提取确实已存在的元素,例如:
vector<int>ivec;//empty vector
cout<<ivec[0];//Error: ivec has no elements!
vector<int>ivec2(10);//vector with 10 elements
cout<<ivec[10];//Error:ivec has elements 0...9
试图获取不存在的元素必然产生运行时错误。
附:常用方法
1.push_back() 在数组的最后添加一个数据
2.pop_back() 去掉数组的最后一个数据
3.at() 得到编号位置的数据
4.begin() 得到数组头的指针
5.end() 得到数组的最后一个单元+1的指针
6.front() 得到数组头的引用
7.back() 得到数组的最后一个单元的引用
8.max_size() 得到vector最大可以是多大
9.capacity() 当前vector分配的大小
10.size() 当前使用数据的大小
11.resize() 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve() 改变当前vecotr所分配空间的大小
13.erase() 删除指针指向的数据项
14.clear() 清空当前的vector
15.rbegin() 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend() 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty() 判断vector是否为空
18.swap() 与另一个vector交换数据