**
对于vector的用法也分为两种:
**
- 数组习惯
- STL习惯
**
对于数组习惯:
**
1. 我们可以用下标操作符访问vector的元素,与访问内置数组的元素的方式一样。例如:
int ia[10];
vector<int> ivec(10); //类似于定义包含十个元素的内置数组一样:int ia[10]
for (int ix=0; ix<10; ++ix)
ia[ix] = ivec[ix];
- 我们可以用size()查询vector的大小,也可以用empty()来测试它是否为空。例如:
if(ivec.empty())
cout<<"vector is empty"<<endl;
for (int ix=0; ix<ivec.size(); ++ix)
cout<<ivec[ix]<<endl;
对于STL习惯:
我们向vector插入元素,而不是索引元素、向元素赋值。
例如:
push_back(): 在vector的后面插入一个元素。
下面while循环从标准输入读入一个字符串序列,并每次将一个字符串插入到vector中:
vector<string> text;
string word;
while(cin >> word)//如何退出循环,见另一篇博客
{
text.push_back(word);//后面插入元素
}
cout<<"words read are: \n";
for (int ix=0; ix<text.size(); ++ix)//下标操作符来迭代访问元素。
cout<<text[ix]<<' ';
cout<<endl;
访问元素更典型的做法是使用vector操作集中的begin()和end()所返回的迭代器对(iterator):
cout<<"words read are:\n";
for(vector<string>::iterator it=text.begin(); it != text.end(); ++it)
cout<< *it <<' ';
cout<<endl;
iterator 是标准库中的类,它具有指针的功能。
*it;//对迭代器解引用,并访问其指向的实际对象。
++it;//向前移动迭代器it,使其指向下一个元素
**
注意:
**
不要混用这两种习惯用法。例如:
vector<int> ivec6;//定义了一个空的vector
ivec6[0] = 1024; //错误。因为:
因为:ivec6还没有第一个元素。我们只能索引vector中已经存在的元素。
类似的,当我们用一个给定大小定义一个vector时:
vector<int> ivec(10);
任何一个插入操作都将增加vector的大小,而不是覆盖掉某个现有的元素。
const int size = 7;
int ia3[size] = {0, 1, 1, 2, 3, 5, 8};
vector<int> ivec7(size);
for (int ix=0; ix<size; ++ix)
ivec7.push_back(ia[ix]);
//注意:程序结束时ivec7包含14个元素,ia的元素从第八个元素开始插入。
另外,在STL习惯用法中,vector的一个或多个元素可以被删除,将在另外一片博客中讨论。