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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

动力节点王鹤SpringBoot3学习笔记——第六章 远程访问@HttpExchange[SpringBoot 3]

远程访问是开发的常用技术,一个应用能够访问其他应用的功能。Spring Boot提供了多种远程访问的技术。 基于HTTP协议的远程访问是支付最广泛的。Spring Boot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring包装了底层HTTP客户的访问细节。...

怎么使用PHP修改本地地址 - 编程语言

这篇“怎么使用PHP修改本地地址”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PHP修改本地地址”文章吧。 首先,需...

2036: [蓝桥杯2022初赛] 统计子矩阵(二维前缀和,一维前缀和)

2036: [蓝桥杯2022初赛] 统计子矩阵 内存限制256 MB 时间限制1 S 标准输入输出 题目类型传统 评测方式文本比较 上传者外部导入 提交310 通过74 题目描述 给定一个 N × M 的矩阵A请你统计有多少个子矩阵(最小 1 × 1最大 N × M) 满足 子矩阵中所有数...

Python关于面向对象的问题有哪些 - 编程语言

这篇“Python关于面向对象的问题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python关于面向对象的问题有哪些”文章吧。...

怎么在python中创建单元测试 - 编程语言

本篇内容主要讲解“怎么在python中创建单元测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在python中创建单元测试”吧! 让我们先从为什么要做测试开始:1、减少手动测试的需求因为测...

vue 3d旋转相册源码如何用 - web开发

本文小编为大家详细介绍“vue 3d旋转相册源码如何用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue 3d旋转相册源码如何用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 为了运行这个Vue 3D旋转相册...