C++学习笔记之erase

今天编写《C++primer》的习题9.26的小程序,主要是对erase的使用。先贴上代码。

#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(){
         int a[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 };
         size_t a_size = sizeof(a)/sizeof(int);
         vector<int> vec(a, a + a_size);
         list<int> lis(a, a + a_size);

         cout << "The original integers are: ";
         for(size_t i =0; i != a_size; ++i)
                 cout << a[i] << " ";
         cout << endl;

         //erase operation on Vector
         for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
                 if(*iter%2 != 0)
                        iter = --vec.erase(iter);
         cout << "Vector is: ";
         for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
                 cout << *iter << " ";
         cout << endl;

         //erase Operation on List
         for(list<int>::iterator iter = lis.begin(); iter != lis.end(); ++iter)
                 if(*iter%2 == 0)
                         iter = --lis.erase(iter);
         cout << "List is: ";
         for(list<int>::iterator iter = lis.begin(); iter != lis.end(); ++iter)
                 cout << *iter << " ";
         cout << endl;

         return 0;
 }                        

开始忽略了我使用erase时候地迭代器会失效,于是在for循环里面直接直接写了erase(iter),结果可想而知了。erase删除容器的一个元素以后会返回之指向已删除元素的下一个元素的迭代器,因此为了能够完整遍历整个容器,就将返回的迭代器减1以后重新赋给iter,这样iter会保持有效。
erase还有另外一种形式c.erase(b,e) 删除两个迭代器之间的元素,返回指向被删除元素段的后一个元素的迭代器。
c.pop_back()c.pop_front() 分别删除容器 c 的最后一个和第一个元素
另外需要注意:
1. vector中的迭代器可以进行加减运算,但是 list 中的迭代器不可以。因此在在以后的编写程序过程中尽量用++--
2. vector中没有c.push_front()c.pop_front()函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值