简单的容器操作问题

nkzhjw 2005-12-16 05:21:17
#include<iostream>
#include<list>

using namespace std;

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

list<int>::iterator it;
for ( it = iList.begin(); it != iList.end(); ++it )
{
if ( *it % 2 != 0 )
iList.erase( it );
}

cout << "OK" << endl;
for ( it = iList.begin(); it != iList.end(); it++ )
{
cout << *it << endl;
}

}

编译连接都无错误,可是执行的时候会莫名其妙的结束,请大家帮忙看看
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2005-12-16
  • 打赏
  • 举报
回复
在C++PRIMER第6章中有源码的
fiftymetre 2005-12-16
  • 打赏
  • 举报
回复
回复人: conquer(戏子) ( ) 信誉:100 2005-12-16 17:31:00 得分: 0


for ( it = iList.begin(); it != iList.end(); ++it )
{
if ( *it % 2 != 0 )
iList.erase( it );
}
当迭代的时候,不能就erase掉. it指向的是ilist的内部.你erase掉,相当与你修改了控制循环的变量.


认同
nkzhjw 2005-12-16
  • 打赏
  • 举报
回复
那么当it所代表地址处的变量被移除后,该点的值置为什么?还可不可以访问?
conquer 2005-12-16
  • 打赏
  • 举报
回复
for ( it = iList.begin(); it != iList.end(); ++it )
{
if ( *it % 2 != 0 )
iList.erase( it );
}
当迭代的时候,不能就erase掉. it指向的是ilist的内部.你erase掉,相当与你修改了控制循环的变量.

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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