stl map高效遍历删除的方法 [转]

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    for(;iter!=mapStudent.end();)
    {
         if((iter->second)>=aa)
         {
             //满足删除条件,删除当前结点,并指向下面一个结点
                  mapStudent.erase(iter++);
         }
         else
         {
         //条件不满足,指向下面一个结点
         iter++;
         }
    }
    这种删除方式也是STL源码一书中推荐的方式,分析 mapStudent.erase(iter++)语句,map中在删除iter的时候,先将iter做缓存,然后执行iter++使之指向下一个结点,再进入erase函数体中执行删除操作,删除时使用的iter就是缓存下来的iter(也就是当前iter(做了加操作之后的iter)所指向结点的上一个结点)。

        根据以上分析,可以看出mapStudent.erase(iter++)和map Student.erase(iter); iter++;这个执行序列是不相同的。前者在erase执行前进行了加操作,在iter被删除(失效)前进行了加操作,是安全的;后者是在erase执行后才进行加操作,而此时iter已经被删除(当前的迭代器已经失效了),对一个已经失效的迭代器进行加操作,行为是不可预期的,这种写法势必会导致 map操作的失败并引起进程的异常。
     
    转自: http://www.cnblogs.com/lidabo/p/3552552.html
  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    “stl map高效遍历删除的方法 [转]” 的相关文章

    C++怎么改变参数值 - 开发技术

    这篇文章主要介绍了C++怎么改变参数值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么改变参数值文章都会有所收获,下面我们一起来看看吧。背景说明 1、通常我们将参数(包括普通变量、指针变量和引用变量)传递给函数使用,有的...

    华为OD机试 - 比赛评分(Java) | 机试题+算法思路+考点+代码解析 【2023】

    比赛评分 题目 一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。打分规则为每个评委对选手打分,最高分10分,最低分1分。 请计算得分最多的3位选手的编号。如果得分相同,则得分高分值最多的选手排名靠前(10分数...

    模板方法模式(Template)

    模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑...

    状态模式(State)

    状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类. 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化. 要点: 1.状态模式允许一个对象基于内...

    Codeforces Round #163 (Div. 2) / 226A Stones on the Table (字符串处理)

    A. Stones on the Table http://codeforces.com/problemset/problem/266/A time limit per test memory limit per test i...

    Codeforces Round #186 (Div. 2) / 313B Ilya and Queries (字符串处理)

    B. Ilya and Queries time limit per test memory limit per test input output Ilya the Lion wants to help all...