标题: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-59440-1-1.html




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

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