CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

奇怪的问题list::eraser()

楼主XueBoy163(菜刀之恋)2005-05-03 17:44:10 在 C/C++ / C++ 语言 提问

同样的问题在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

相关问题

  • std::list 的奇怪问题
  • 奇怪,奇怪
  • 奇怪,奇怪!
  • 奇怪奇怪???
  • 奇怪!奇怪
  • 奇怪奇怪...........?????...........
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪???奇怪??奇怪???
  • 奇怪奇怪真奇怪。

关键词

  • iter
  • back
  • push
  • erase
  • list
  • argc
  • argv
  • temp
  • begin
  • using namespace std

得分解答快速导航

  • 帖主:XueBoy163
  • lw1a2
  • yeswelkin
  • bing_huo
  • 277894613

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo