stl map高效遍历删除的方法
来源:互联网 发布:c2c电商市场份额 淘宝 编辑:程序博客网 时间:2024/04/28 12:58
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操作的失败并引起进程的异常。
0 0
- stl map高效遍历删除的方法
- stl map高效遍历删除的方法
- stl map高效遍历删除的方法
- stl map遍历和删除的方法
- stl map遍历删除的方法
- Map的高效遍历
- stl的list、set、map删除方法
- 遍历删除map中元素的方法
- C++ map正确的遍历删除方法
- c++ STL map的增加删除遍历操作
- C++ STL Map的创建、删除、插入、更新、遍历
- STL中用erase()方法遍历删除元素注意的问题
- C++ STL容器遍历删除元素的方法
- stl map vector的删除
- Map遍历的两种方式(首推entrySet())--遍历Map时删除元素的方法
- Java中遍历Map时删除元素的方法
- Java中List遍历删除以及Map的输出方法
- 遍历map时删除不需要的元素方法
- C++学习:模板类学习
- UITableView的一些属性
- 编译常见错误解决
- 在window下搭建GNUstep 环境
- java中枚举类型的简单使用
- stl map高效遍历删除的方法
- tableview 设置group之间的距离
- 中国教育到了最危险的时候
- 转载11:(译)Edge.js:让.NET和Node.js代码比翼齐飞
- UIImagePickerController的一些属性(调照相机或者图片)
- Android 系统启动不起原因查找
- POJ 1003 Hangover(二分搜索)
- 实际开发工验
- android 应用使用截屏功能