奇怪的问题list::eraser()
同样的问题在vector上运行很好,可是到了list 上:
#include "stdafx.h"
#include "list"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
list<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(6);
for(list<int>::iterator iter = a.begin();
iter != a.end(); iter ++)
{
if(*iter == 4)
a.erase(iter);
}
return 0;
}
请教,为什么?
问题点数:20、回复次数:5Top
1 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-05-03 18:12:00 得分 10
你删了那个4的,iter指向的内容就没了,所以就异常了,应该这样
#include <list>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
list<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(6);
for(list<int>::iterator iter = a.begin();
iter != a.end(); iter ++)
{
if(*iter == 4)
{
list<int>::iterator temp=iter;
iter++;
a.erase(temp);
}
}
for(list<int>::iterator iter=a.begin();iter!=a.end();++iter)//显示
cout<<*iter<<" ";
cout<<endl;
system("pause");
return 0;
}
-----------------------
我用的是DevCPP,头文件有些差异,你改成自己用的编译器的。
Top
2 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-05-03 18:16:18 得分 0
上面那个程序有for循环不好删除相邻的4,我做了调整:
#include <list>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
list<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(4);//相邻的4
a.push_back(5);
a.push_back(6);
list<int>::iterator iter = a.begin();
while(iter!=a.end())
{
if(*iter == 4)
{
list<int>::iterator temp=iter;
++iter;
a.erase(temp);
continue;
}
++iter;
}
for(iter = a.begin();iter!=a.end();++iter)
cout<<*iter<<" ";
cout<<endl;
system("pause");
return 0;
}
Top
3 楼yeswelkin(我思故我在)回复于 2005-05-03 19:39:47 得分 3
赞成 回复人: lw1a2(一刀(P610)) ( ) 信誉:101
Top
4 楼bing_huo(我是一个演员!)回复于 2005-05-03 20:06:10 得分 5
for(list<int>::iterator iter = a.begin();
iter != a.end(); iter ++)
{
if(*iter == 4)
a.erase(iter++); //改成这样就行了
}
Top
5 楼277894613(秒大刀)回复于 2005-05-03 20:10:01 得分 2
强!!!!!!Top




