C++容器遍历时删除元素
vector
错误做法
这样做会在遍历过程中越界导致程序崩溃
std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i = vecInt.begin(); i != vecInt.end() ; ++i) {if (*i == 1) {vecInt.erase(i);}}
正确做法
std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i = vecInt.begin(); i != vecInt.end();) {if (*i == 1) {vecInt.erase(i);}else {++i;}}
调用erase函数后迭代器会指向被删除元素的下一个元素,如果被删除的元素是容器最后一个元素,则指向容器的end()
map
错误做法
std::map<int, std::string> map_i_s;map_i_s.insert({ 1, "1" });map_i_s.insert({ 2, "2" });map_i_s.insert({ 3, "3" });for (auto i = map_i_s.begin(); i != map_i_s.end(); ++i;) {if (i->first > 2) {map_i_s.erase(i);}}
正确做法
std::map<int, std::string> map_i_s;map_i_s.insert({ 1, "1" });map_i_s.insert({ 2, "2" });map_i_s.insert({ 3, "3" });for (auto i = map_i_s.begin(); i != map_i_s.end(); ) {if (i->first > 2) {i = map_i_s.erase(i);}else {++i;}}
set
list
stack
queue
C++容器遍历时删除元素相关推荐
- List如何在遍历时删除元素
背景:业务中经常会涉及遍历list时对集合进行插入或者删除操作 一. 错误方式 先看看下面几段代码,1是foreach的方式去遍历list并删除元素,2是用迭代器的方式遍历list并删除元素,3是下标 ...
- C++ vector容器遍历并删除元素
在使用C++ vector的迭代器遍历并删除元素时,存在一些不注意的误区,这里特此记录. 在使用迭代器遍历vector元素时,错误的删除方法: vector<int>::iterator ...
- Map遍历时删除元素
package ee;import java.util.HashMap; import java.util.Iterator;public class Demo {public static void ...
- Kotlin list在遍历时删除元素方法汇总
方法一:Iterator迭代器 val list = arrayListOf("1", "2", "3", "4", & ...
- cocos2d-x CCArray用法 遍历和删除元素
本文为 justbilt 原创,转载请标明原作者及原文出处,以示尊重! 作者:justbilt 原文:http://blog.justbilt.com/25/ 一.基本用法 1.声明初始化变量 C++ ...
- vector, list, map在遍历时删除符合条件的元素
直接看源码,内有详细解释 /* 测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include <iostrea ...
- Python - 遍历列表时删除元素的正确做法
Python-遍历列表时删除元素的正确做法 一.问题描述 因为删除元素后,整个列表的元素会往前移动,而i却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果. 问题现象如下: a = [1, ...
- python 遍历list删除元素_详解Python遍历列表时删除元素的正确做法
这篇文章主要介绍了详解Python遍历列表时删除元素的正确做法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.问题描述 这是 ...
- Python遍历列表时删除元素的几种方法
问题来源: 删除列表中的指定元素 描述: 输入一个整数列表,并输入一个整数x,删除列表中所有值为x的数,再输出列表. 问题代码: a = list(eval(input())) x = eval(in ...
最新文章
- PHP替换字符串函数strtr()和str_replace()
- jQuery选择器总结(上)
- 页游开发_小花仙即将出手游,敬童年一起玩过的7K7K和4399
- 透过Baba is you看「玩点叙述」
- AWS Lambda事件源映射:使您的触发器混乱无序
- Swift-属性监听
- java jtextpane_java – 从JTextPane获取原始文本
- Kubernetes架构图 Architecture Workload Networking Storage RBAC
- sql server2008 如何获取上月、上周、昨天、今天、本周、本月的查询周期(通过存储过程)...
- 【软件工程】对于Why Software Development Methodologies Suck(为什么软件开发方法论让你觉得糟糕)问题的探讨
- 解决禁用IE设置代理检测不通过连不上网
- HTML5里video标签支持哪些格式的视频文件及其遇到的坑
- 微商模式的出路在哪里?
- JCMsuite 纳米光学仿真分析
- 什么是物联网技术?物联网主要技术有哪些?
- html video ajax,利用AJAX开源项目 在网页里播放视频实现方法
- cc讲故事_停止讲故事
- 李宏毅《机器学习》笔记:3.误差分析和梯度下降
- 魏德米勒端子eplan宏_Eplan部件库和宏全集
- C#sealed关键字
热门文章
- Java实现qq截图工具
- [Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞
- 扬州大学计算机考研难考吗,扬州大学(专业学位)计算机技术考研难吗
- 云计算系统是大规模计算机系统吗,云计算的系统架构及技术探析
- git获取本地版本号_Git使用小结
- es6 includes(), startsWith(), endsWith()
- 网页中二维码识别规则
- 在HTML5中如何利用Canvas处理并存储图片
- photoshop 切片工具进行切图
- java之Hibenate中监听事件的重写和二级cache缓存