vector<string>

#include<string>#include<iostream>#include<vector>usingnamespacestd;intmain(){vector<... #include<string>
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<string> a(2,"hi!");
for(vector<string>::size_type i=a.begin();i!=a.end();i++)
cout<<*i;
cout<<endl;
return 0;
}
对于容器很无语,可不可以帮我找找哪里错了?为什么?
展开
 我来答
dzf2018
推荐于2017-09-29 · TA获得超过5267个赞
知道大有可为答主
回答量:823
采纳率:40%
帮助的人:624万
展开全部
for(vector<string>::iterator i=a.begin();i!=a.end();i++) 要使用迭代器 iterator

使用vexctor容器必须包含”vector”头文件,然后创建一个vector容器对象(方式很多种,这里就不一一介绍了,具体看实例 :D),然后我们对vector容器初始化赋值(可以使用push_back在容器尾端加入元素),如果我们要对vector容器遍历的话,可以常用数组或者迭代器的方式.

下面的例子展示了如何用数组方式访问vector元素.

#include <vector>

#include <iostream>

using namespace std;

int main(void){

vector<int> v;

v.push_back(11);

v.push_back(22);

v.push_back(33);

for(int i = 0; i < v.size(); i++)

cout << "v[" << i << "] = " << v[i] << endl;

return 0;

}

运行结果:

v[0] = 11

v[1] = 22

v[2] = 33

//

如果要使用迭代器的方式访问的话就要使用vector容器提供的iterator类型,定义一个迭代器变量,然后对迭代器进行自增”++”,或者自减”--”之类的操作就可以将迭代器从一个元素位置移动到另一个元素位置,然后再通过取值”*”操作,就可以得到迭代器指向的元素.

vector容器还提供了begin()和end()函数,用于获取首元素的迭代器和最后一个元素的下一位置的迭代器(标注1).

下面的代码就展示了如何用迭代器访问vector:

#include <vector>

#include <iostream>

using namespace std;

int main(void){

vector<int> v;

v.push_back(11);

v.push_back(22);

v.push_back(33);

vector<int>::iterator i;

int j;

for(i=v.begin(),j=0; i!=v.end(); i++,j++)

cout<<"v[" << j << "] = " << *i<< endl;

return 0;

}

运行结果: (同上)

//

除了了push_back函数,可以给vector容器添加元素以外,insert函数则可以在任意位置插入元素.由于插入时候要先将插入位置后面的元素后移,因此insert函数耗时比push_back函数久.

下面代码就展示了如何使用insert函数:

#include <vector>

#include <iostream>

using namespace std;

int main(void){

vector<int> v;

v.push_back(22);

v.push_back(33);

v.push_back(55);

v.push_back(66);

v.insert(v.begin() + 3, 44);

v.insert(v.begin(), 11);

v.insert(v.end(), 77);

for(int i = 0; i < v.size(); i++)

cout << "v[" << i << "] = " << v[i] << endl;

return 0;

}

运行结果: (类似于上)

//

学会了如何给vector容器添加元素以后,当然要知道怎么删除元素了.vector容器提供了erase函数,可以用来删除指定元素或者迭代器区间[first,last),(标注1).

vector容器提供另一个删除元素的函数是clear函数,它在内部调用了erase函数将[begin().end())区间的元素删除.

下面代码展示了如何使用erase函数和clear函数:

#include <iostream>

#include <vector>

using namespace std;

int main(void){

vector<int> v;

v.push_back(11);

v.push_back(22);

v.push_back(33);

v.push_back(44);

v.push_back(55);

v.erase(v.begin()+1);

v.erase(v.begin()+2,v.begin()+4);

vector<int>::iterator i;

int j;

for(i=v.begin(),j=0; i!=v.end(); i++,j++)

cout<<"v[" << j << "] = " << *i<< endl;

v.clear();

cout << "vector clear()!" << endl;

return 0;

}

运行结果:

v[0] = 11

v[1] = 33

vector clear()!

//

之前我们用的迭代器是正向,vector还提供了反向迭代器(reverse_iterator,相应的rbegin(),rend()),具体使用方法跟之前的一样,这里就不举例了.(浪费篇幅:-D)

//

如果你想交换两个vector容器元素的话,可以使用swap()函数.

下面代码展示了如何使用swap函数:

#include <vector>

#include <iostream>

using namespace std;

void print(vector<int>& v){

for(int i = 0; i < v.size(); i++)

cout << v[i] << " ";

cout << endl;

}

int main(void){

vector<int> v1;

v1.push_back(11);

v1.push_back(22);

v1.push_back(33);

cout << "v1 = ";

print(v1);

//

vector<int> v2;

v2.push_back(44);

v2.push_back(55);

v2.push_back(66);

cout << "v2 = ";

print(v2);

//

v1.swap(v2);

cout << "After swap:" <<endl;

cout << "v1 = ";

print(v1);

cout << "v2 = ";

print(v2);

return 0;

}

运行结果:

v1 = 11 22 33

v2 = 44 55 66

After swap:

v1 = 44 55 66

v2 = 11 22 33

//

vector容器还提供了一些可以用于统计的函数,可以用empty函数来判断容器是否为空,size函数来容器实际的元素个数(上面已经有用到过),max_size函数来获得容器的最大元素个数,capacity函数来获得容器当前可容纳的vector元素个数(如果没有特殊声明容器可容纳元素个数的话,该函数返回值一般跟size是一样的,不过如果使用reserve函数来重新调整容器可容纳元素个数则会修改该函数的返回值,而不会修改size函数的返回值),

下面的代码展示了上面几个函数的用法:

#include <vector>

#include <iostream>

using namespace std;

void print(vector<int>& v){

cout << "---------------------" << endl;

cout << "empty = " << v.empty() << endl;

cout << "size = " << v.size() << endl;

cout << "capacity = " << v.capacity() << endl;

}

int main(void){

using namespace std;

vector<int> v;

cout << "max_size = " << v.max_size() << endl;

print(v);

v.push_back(11);

v.push_back(22);

print(v);

v.push_back(33);

v.push_back(44);

print(v);

v.reserve(30);

print(v);

return 0;

}

运行结果: (篇幅有限,故略之
wb_feng
2010-03-10 · TA获得超过160个赞
知道答主
回答量:133
采纳率:0%
帮助的人:162万
展开全部
for(vector<string>::iterator i=a.begin();i!=a.end();i++)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式