关于C++迭代器的问题,请问下面这个程序运行的时候为什么会崩溃?

#include<iostream>#include<vector>#include<string>#include<list>voidmain(){usingnames... #include<iostream>
#include<vector>
#include<string>
#include<list>
void main()
{
using namespace std;
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
int j;
j=sizeof(ia)/sizeof(*ia);
vector<int> sv(ia,ia+j);
list<int> sc(ia,ia+j);
for(list<int>::iterator k=sc.begin ();k!=sc.end ();++k)
{
if(*k%2!=0)
{
sc.erase(k);
}
}

}
展开
 我来答
百度网友f7b9aa6bb
2011-01-25 · TA获得超过2250个赞
知道小有建树答主
回答量:584
采纳率:100%
帮助的人:428万
展开全部
你好!

使用erase函数的时候要特别小心,使用方法应该如下:k= sc.erase(k);
因为按照你的代码的意思,删除之后,迭代器指向删除元素的后一元素,但是erase函数里面并没有完成后移的工作,而是用了返回下一元素迭代器的方式。
另外要注意不是每个路径都k++,只有不删除的时候才要k++,加个else,把k++放里面。

希望我的回答能对你有所帮助!

如果满意记得采纳为最佳答案哦!~
如果还有问题,可以BaiduHi我,O(∩_∩)O~!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式