STL容器迭代过程中删除元素技巧
(本站文章均出自原创,转载请注明出处~)
1.连续内存序列容器(vector,string,deque)序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。
vector<int> c;
for(vector<int>::iterator it = c.begin(); it != c.end();)
{
if(need_delete())
it = c.erase(it);
else
++it;
}
2.关联容器(set,multiset,map,multimap)
关联容器的erase方法没有返回值,被删除的迭代器失效,所以删除前必须确保能得到下一个迭代器,可以用“后置递增迭代器”技术。
map<int,int> m;
for(map<int,int>::iterator it = m.begin(); it != m.end();)
{
if(need_delete())
m.erase(it++);
else
++it;
}
m.erase得到it的一个副本,在erase真正开始之前it已经递增了。
所以erase得到了当前的迭代器,在erase内部工作开始之前it已经++了,正好满足我们的需要。
3.非连续内存序列容器(list)
只所以单独列出来是因为以上两种方法对list都适用,可依自己喜好选择。
转载于:https://www.cnblogs.com/kjee/archive/2010/05/30/stl_cntr_delete_element_while_iterating.html
STL容器迭代过程中删除元素技巧相关推荐
- C++中STL容器利用迭代器删除元素小结
C++中STL容器利用迭代器删除元素小结 在STL容器中删除元素,容易导致迭代器失效,故应该清楚明白其用法,现在总结一下. 转载自:https://blog.csdn.net/yf_li123/art ...
- 如何在C ++中从容器中删除元素
How to remove elements from container is a common C++ interview question, so you can earn some brown ...
- 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...
从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...
- 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
[重难点][Java集合 02]List.Set.Map 的区别.常见的线程安全的集合类.Collection 为什么只能在 Iterator 中删除元素 文章目录 [重难点][Java集合 02]L ...
- 集合删除元素技巧 removeIf
集合删除元素技巧 removeIf removeIf() 是从 JDK1.8 开始提供的. 之前我们删除 List 中的元素的话,一般使用循环遍历实现.今天发现 removeIf 很好用,记录一下.
- 从PHP中的数组中删除元素
有没有一种简单的方法可以使用PHP从数组中删除元素,以便foreach ($array)不再包含该元素? 我认为将其设置为null可以做到,但是显然不起作用. #1楼 如果您有一个数字索引的数组,其中 ...
- C# - 在foreach中删除元素
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在for ...
- List与Map的遍历过程中删除元素
在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入"陷阱"导致遗漏或者程序异常. List遍历过程中删除元素 使用索 ...
- php unset函数_PHP | 使用unset()函数从数组中删除元素
php unset函数 Given an array and we have to remove an element from the array. 给定一个数组,我们必须从数组中删除一个元素. u ...
最新文章
- (LBS)基于地理位置的社交应用大战
- 解决MariaDB无法远程连接
- JS中遍历数组的两种方式
- 10.java 关键字与保留字
- Mongodb3.4 复制集及分片配置
- 服务器电源维修哪里便宜,服务器电源维修
- MATLAB中的柱面与球面
- 初始化string对象的方式
- 《集异璧》作者侯世达:王维、杨绛与机器翻译的本质
- tkmybatis能连接oracle吗,《放弃Mybatis使用tkMybatis》
- 在c# winform 的 monthCalendar 里粗体凸显有数据的日期
- -webkit-touch-callout: none;禁止ios弹出菜单,长按图片保存到手机时
- Android触摸屏突然没反应了
- win10黑屏Duilib资源加载失败
- 盘点IT行业“中国式合伙人”的离合春秋
- java实现12小时制和24小时制的时间
- 都雪冬 20190919-2 功能测试
- c语言计算特殊角的正弦值,特殊角的三角函数值表 常用的正余弦函数值
- H3Cs5500堆叠配置
- linux cpu多核运行,LINUX在多核环境下,如果控制使用的CPU数目
热门文章
- 后台服务器经典面试题
- quick-cocos2d-x教程12:实现文本和password输入界面
- Python+selenium自动化测试中Windows窗口跳转方法
- 博为峰JavaEE技术文章 ——MyBatis 注解
- 2、ESXI安装出错
- MPLS *** Trouble Shooting 笔记
- CISCO路由器TELNET和SSH远程登录配置实例
- Malformed server response 解决方案
- 从别人那拷下来的几点Session使用的经验(转载)
- 微信小程序惩治“老赖” 河北高院“老赖地图”上线