这段代码到底哪里错了?很简单的,帮忙看看!

lemon520 2003-09-25 11:24:40
用单个iterator形式的erase()删除ilist中所有奇数位置的元素。
编译没有问题,一运行就非法操作!#include<iostream>
#include<list>

using namespace std;

void main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
list<int> ilist(ia,ia+11);
list<int>::iterator iter=ilist.begin();
for(;iter!=ilist.end();++iter)
cout<<(*iter)<<" ";
iter=ilist.begin();
while(iter!=ilist.end())
{
ilist.erase(++iter);
}
iter=ilist.begin();
for(;iter!=ilist.end();iter++)
cout<<(*iter)<<" ";
}

...全文
44 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
neophyte111 2003-10-12
  • 打赏
  • 举报
回复
xfxfxf 仍旧是错误的
虽然能通过编译和执行,但是结果不正确
希望楼主注意不要iter!= ilist.end()的语句,因为删除元素后长度永远到不了end()
Andy84920 2003-09-25
  • 打赏
  • 举报
回复
楼上的:
for( iter= ilist.begin ; iter!= ilist.end() ;iter++ ) //少了括号
{
ilist.erase(iter);
iter++ ; //可以直接在上面迭代时用iter+=2;!好吗?
if( iter==ilist.end() )
{break;} //不要{}吧?不好看.

}
lcp 2003-09-25
  • 打赏
  • 举报
回复
干脆全部贴一遍,搂主比较好查看:

#include<iostream>
#include<list>
using namespace std;

void main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
list<int> ilist(ia,ia+11);

list<int>::iterator iter=ilist.begin();
//print all the members of array
for(;iter!=ilist.end();++iter)
cout<<(*iter)<<" ";
//print oddor members of array
iter=ilist.begin();
for( iter= ilist.begin ; iter!= ilist.end() ;iter++ )
{
ilist.erase(iter);
iter++ ;
if( iter==ilist.end() )
{break;}

}
iter=ilist.begin();
for(;iter!=ilist.end();iter++)
cout<<(*iter)<<" ";
}
lcp 2003-09-25
  • 打赏
  • 举报
回复
修改下面这一段:

while(iter!=ilist.end())
{
ilist.erase(iter++);
}
xfxfxf 2003-09-25
  • 打赏
  • 举报
回复
从这句话开始改:
iter=ilist.begin();
list<int>::iterator tmp=iter;
++tmp;
++iter;
while(iter!=ilist.end())
{
++(++iter);
ilist.erase(tmp);
tmp=iter;
}
villager 2003-09-25
  • 打赏
  • 举报
回复
我只会看C代码,C++的不会
lemon520 2003-09-25
  • 打赏
  • 举报
回复
xfxfxf的代码是正确的!谢谢!
lcp(dupi) 的代码出现和我同样的错误

另外 ,楼上的:list的迭代器不支持iter+=2这样的操作!

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧