| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 667 人关注过本帖
标题:erase()用错了吗?请大家进来分析一下
只看楼主 加入收藏
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
 问题点数:0 回复次数:5 
erase()用错了吗?请大家进来分析一下

实现删除数组的奇数下标数
#include <iostream>
#include <list>;
using namespace std;
int main(){
int a[]={0,1,1,2,3,5,8,13,21,55,89};
list<int>v(a,a+11);

list<int>::iterator it=v.begin ();

for(;it!=v.end ();it++)
{if((*it%2)!=0)
v.erase (it);
}
for(it=v.begin ();it!=v.end();++it)
cout<<*it<<"\n";
return 0;
}
执行时总是出现错误关闭应该是erase,但不知道是怎么错的,谢谢!

[此贴子已经被作者于2006-4-23 11:21:53编辑过]

搜索更多相关主题的帖子: erase int list begin include 
2006-04-23 11:20
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

因为链表重载的++操作是依靠每个节点的指向下一个的指针进行的,你把it指向的节点删除了,it就不再指向链表的节点了,就不能用++了。

[CODE]#include <iostream>
#include <list>
using namespace std;
int main()
{
int a[]={0,1,1,2,3,5,8,13,21,55,89};
list<int> v(a,a+11);

list<int>::iterator it=v.begin();

while(it != v.end())
{
if((*it%2)!=0)
it = v.erase(it); //erase()返回指向被删除的节点的下一个迭代器
else
it++;
}

for(it=v.begin(); it!=v.end(); ++it)
cout<<*it<<"\n";

system("pause");
return 0; [/CODE]


2006-04-23 12:23
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
应该说是链表的iterator重载的++,上面说的不准确。

2006-04-23 14:17
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用woodhead在2006-4-23 12:23:00的发言:

因为链表重载的++操作是依靠每个节点的指向下一个的指针进行的,你把it指向的节点删除了,it就不再指向链表的节点了,就不能用++了。

[CODE]#include <iostream>
#include <list>
using namespace std;
int main()
{
int a[]={0,1,1,2,3,5,8,13,21,55,89};
list<int> v(a,a+11);

list<int>::iterator it=v.begin();

while(it != v.end())
{
if((*it%2)!=0)
it = v.erase(it); //erase()返回指向被删除的节点的下一个迭代器 ????
else
it++;
}

for(it=v.begin(); it!=v.end(); ++it)
cout<<*it<<"\n";

system("pause");
return 0; [/CODE]

有些不明白,把it删除的时候,它怎么会返回被删除节点的下一个迭代器赋值给it???


我是小小登山者!
2006-04-23 16:17
gototheworld
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2006-3-24
收藏
得分:0 
你为什么不看看erase()函数到底是什么东西呢

路漫漫其修远兮 吾将上下而求索
2006-04-23 18:03
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用gototheworld在2006-4-23 18:03:00的发言:
你为什么不看看erase()函数到底是什么东西呢

可能是我学的深度不够,还请多多指教!!!


我是小小登山者!
2006-04-23 21:03
快速回复:erase()用错了吗?请大家进来分析一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015169 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved