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操作的失败并引起进程的异常。

stl map高效遍历删除的方法相关推荐

  1. 探索List和Map循环遍历删除问题

    通过源码解读Java中List和Map循环遍历导致的删除问题. 前言 Java代码写的其实不多,上周写List和Map的遍历,需要删除里面的元素时,直接就抛出异常,因为接触Java时间并不长,这种方式 ...

  2. C++map容器遍历删除:cannot increment value-initialized map/set iterator

    今天写C++结课作业遇到一个遍历删除的bug: 原代码: for(it=imap.begin();it!=imap.end();it++) imap.erase(it) 运行后: 第一次循环末尾,it ...

  3. 【千律】C++基础:map 循环遍历删除元素,及其报错的解决方案

    报错原因:采用erase移除迭代器后,迭代器的值变为-572662307,无法作为迭代器继续运算. 详细:当程序执行到 stu_map.erase(itor) 时,满足条件的第一个元素被删除,从而导致 ...

  4. php dir类,PHP基于dir类实现目录遍历删除

    这篇文章主要介绍了PHP使用内置dir类实现目录遍历删除的方法,涉及php中dir类的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP使用内置dir类实现目录遍历删除的方法. ...

  5. Map集合遍历常用方法总结,记得收藏哦

    目录 1.Map集合遍历四种方法 1.1.  第一种通过key遍历获取value 1.2. 第二种通过entrySet遍历获取key和value(推荐使用) 1.3. 第三种通过entrySet(). ...

  6. java中List遍历删除元素

    删除末尾几个元素 import java.util.LinkedList; import java.util.List;public class TestList {public static voi ...

  7. STL中用erase()方法遍历删除元素

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...

  8. Java遍历Map对象的四种方法

    在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  9. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

最新文章

  1. SQL Server DATEADD() 函数
  2. 车辆检测--A Closer Look at Faster R-CNN for Vehicle Detection
  3. 机器学习的数学基础(1)--Dirichlet分布
  4. JavaScript对Json的增删改属性
  5. 牛客网 -- 计算机历年考研复试上机题 -- 手机键盘
  6. Asp.Net WebForm生命周期的详解
  7. 开源数据分析工具 CyberChef
  8. 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点
  9. 基于顺序存储结构的图书信息表的创建和输出(C++)
  10. ajax失败的原因,使用https协议失败的ajax请求失败的可能原因但http工作
  11. java线程间ThreadLocal的传递
  12. MySQL Encryption and Compression Functions(加密)
  13. 1.5不同类型的循环神经网络
  14. [转]在Sql Server中将字符串分割成表格数据示例
  15. C++程序设计课程主页-2014级
  16. android 9 one ui,三星S9+升级安卓9深度体验|一文看懂三星OneUI升级了啥
  17. 给初次参加全国大学生智能汽车竞赛的同学们的一些建议(转)
  18. 堪萨斯大学计算机硕士,堪萨斯大学计算机工程硕士专业入学要求及费用
  19. 27.FastAPI应用生产环境部署
  20. 3D MAX 中的 vary 参数建议。测试图以及中等质量和高等质量参数设置.

热门文章

  1. Linux指定网卡工作模式
  2. 航电 2041 超级楼梯
  3. Word画线条5大技巧,简单实用!
  4. Java Ajax: DWR
  5. CSS+DIV-公司网站
  6. 实验一 查看CPU和内存 用机器指令和汇编指令编程
  7. Java 摄氏和华氏之间的转换
  8. 【分布式】分布式事务解决方案概述
  9. activeMQ安装9(window下)
  10. 基于stm32f427实现SVPWM控制永磁同步开环转动