关于STL中list的erase()函数

本文介绍如何在C++中使用STL list容器进行元素的遍历和删除操作,详细展示了不同方式下迭代器的有效管理和使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1    
  2    #include <string>
  3    #include <list>
  4    #include <iostream>
  5    #include <vector>
  6    
  7    using std::cout;
  8    using std::endl;
  9    using std::list;
 10    using std::iterator;
 11    using std::string;
 12    
 13    typedef   std::list <int>   List;
 14    List   a;
 15    List::iterator   it1;
 16    int main()
 17    {
 18        
 19        a.push_back(1);
 20        a.push_back(2);
 21        a.push_back(3);
 22        a.push_back(4);
 23        a.push_back(5);
 24        
 25           for(it1  =  a.begin();   it1   !=   a.end(); )
 26        {
 27             a.erase(it1); //返回指向下一个
 28             cout<<*it1<<endl; //验证it1为下移,
 29             --it1;//此处去掉,报错
 30             ++it1;
 31        }
 32    }
 33    
 34    使用STLport5.1.4
 35    似乎h文件上面推荐用
 36    
 37    iterator erase(iterator __first, iterator __last) {
 38           while (__first != __last)
 39             erase(__first++);
 40           return __last;
 41     }
 42    
 43    


该程序正确并输出正常

 1    
  2             for(it1  =  a.begin();   it1   !=   a.end(); )
  3         {
  4                    a.erase(it1++); //返回指向下一个
  5                  cout<<*it1<<endl; //验证it1为下移,
  6                   
  7          }
  8    
  9    

这个也可以,

  1    for(it1  =  a.begin();   it1   !=   a.end(); )
  2    {
  3         a.erase(it1);
  4         cout<<*it1<<endl;  
  5         ++it1;
  6    }
  7    
  8    

报runtime错  

这个也可以:


  1     for(it1  =  a.begin();   it1   !=   a.end(); )
  2    {
  3         it1=a.erase(it1);
  4         cout<<*it1<<endl;  
  5         
  6    }
  7    
  8    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值