C++ STL 中erase()的使用需要小心

C++ STL极大的方便了用户编写程序,但是同时一不小心也会犯一些错误,如erase()造成迭代器失效经常会引起错误。

错误示例:

      std::list< int> List;
      std::list< int>::iterator it;
      for( it = List.begin(); it != List.end(); it++)
      {
            if( it符合删除条件 )
            {
               List.erase( it);
            }
      }

由于erase()之后对应位置的迭代器已经失效,这时itList++将无法找到下一个元素。

正确的使用方式是利用erase()的返回值为下一个有效的迭代器或者在调用erase()之前先找到下一个有效的迭代器

正确示例:

     std::list< int> List;
      std::list< int>::iterator it;
      for( it = List.begin(); it != List.end(); )
      {
            if( it符合删除条件 )
            {
               it = List.erase(it);
            }
            else
               it++;
      }

或者

      std::list< int> List;
      std::list< int>::iterator it;
      for( it = List.begin(); it != List.end(); )
      {
            if( it符合删除条件 )
            {
               List.erase( it++);
            }
            else
               it++;
      }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏五分钟学算法

五分钟学会一个有意思的排序:计数排序

由于LeetCode上的算法题很多涉及到一些基础的数据结构,为了更好的理解后续更新的一些复杂题目的动画,推出一个新系列 -----《图解数据结构》,主要使用动画...

13060
来自专栏微信公众号:Java团长

Java多态性理解

多态存在的三个必要条件 一、要有继承; 二、要有重写; 三、父类引用指向子类对象。

13930
来自专栏Vamei实验室

Python基础05 缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。 先看C语言的表...

22690
来自专栏日常学python

史上最全关于sorted函数的10条总结(文末附送书中奖名单)

sorted 用于对集合进行排序(这里说的集合是对可迭代对象的一个统称,他们可以是列表、字典、set、甚至是字符串),它的功能非常强大,本文将深入浅出地介绍 s...

9840
来自专栏游戏开发那些事

【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

13020
来自专栏小樱的经验随笔

【C#学习笔记之一】C#中的关键字

C#中的关键字 关键字是对编译器具有特殊意义的预定义保留标识符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不...

48440
来自专栏Python小屋

Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)

'''程序功能: 给定一个含有多个整数的列表,将这些整数任意组合和连接, 返回能得到的最小值。 代码思路: 将这些整数变为相同长度(按最...

36360
来自专栏博岩Java大讲堂

Java泛型的学习和使用

36340
来自专栏和蔼的张星的图像处理专栏

41. 最大子数组

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 样例: 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,...

34510
来自专栏西枫里博客

Python学习笔记五(列表和元组)

最近这段时间是一年中最忙的时候,学习进度严重耽误,距离上一次更新Python的学习进度又已经一个月过去了,“佩服”我自己。趁着假期,继续学习我的Python,顺...

10010

扫码关注云+社区

领取腾讯云代金券