循环删除vector和map中的元素

HashMap的几种遍历方式及循环删除 HashMap遍历从大的方向来说,可分为以下4类迭代器Iterator方式遍历For Each方式遍历Lambda表达式遍历遍历但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下6使用迭代器的方式进行遍历使用迭代器的方式进行遍历使用的方式进行遍历使用的方式进行遍历使用Lambda表达式的方式进行遍历使用的方式进行遍历接下来我们来看每种遍历方式的具体实现代码。 阅读详情

转载地址:  http://www.cppblog.com/zgysx/archive/2006/12/28/16944.html

删除所有偶数项,并打印出删除的项
1. vector/queue
正确方法1:
void erase(vector<int> &v)
{
for(vector<int>::iterator vi=v.begin();vi!=v.end();)
{
if(*vi % 2 == 0)
{
cout << "Erasing " << *vi << endl;
vi = v.erase(vi);
}
else ++vi;
}
}

正确方法2:
void erase2(vector<int> &v)
{
for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
{
if(*ri % 2 == 0)
{
cout << "Erasing " << *ri << endl;
v.erase((++ri).base()); //erase()函数期待的是正向iterator,故而这里要调
//用base()函数将逆向iterator转换为正向的
}
else ++ri;
}
}



2.map/list
正确方法
void erase(map<int,int> &m)
{
for(map<int,int>::iterator mi=m.begin();mi!=m.end();)
{
if(mi->second % 2 == 0)
{
cout << "Erasing " << mi->second << endl;
m.erase(mi++);
}
else ++mi;
}
}


安捷伦示波器实战指南:从基础操作到精准触发 本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。 阅读详情

相关推荐

Python逆向实战:突破PDD长连接抓包的技术解析

本文详细解析了如何通过Python逆向技术突破PDD长连接抓包的难点,包括分析PDD的网络机制、绕过SSL证书验证以及完整抓包实战流程。文章重点介绍了使用Frida和VAXposed工具解决长连接和SSL Pinning问题,并提供了Python代码示例和数据分析方案,帮助开发者高效抓取PDD数据。

weixin_28678151的博客 1222

linux的vector的删除数据,C++ STL vector删除元素的几种方式(超级详细)

前面提到,无论是向现有 vector 容器中访问元素、添加元素还是插入元素,都只能借助 vector 模板类提供的成员函数,但删除 vector 容器的元素例外,完成此操作除了可以借助本身提供的成员函数,还可以借助一些全局函数。基于不同场景的需要,删除 vecotr 容器的元素,可以使用表 1 中所示的函数(或者函数组合)。表 1 删除 vector 容器元素的几种方式函数功能pop_back()...

weixin_30988079的博客 929

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

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

报错原因:采用erase移除迭代器后,迭代器的值变为-572662307,无法作为迭代器继续运算。 详细:当程序执行到 stu_map.erase(itor) 时,满足条件的第一个元素被删除,从而导致 itor 指针被删除,使其不指向任何元素。针对该问题我们首先想到的就是在删除指针之前,对其进行备份,C++ 将这个临时变量直接建立在 erase 实现里。 因此将stu_map.erase(itor)改为stu_map.erase(itor--)即可 #include <map> #incl

weixin_42704093的博客 3422

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解) 大家好,我是菌菌巧乐兹,励志用最简单的语言来讲解程序知识点。

菌菌兹的博客 1669

FunASR与FreeSWITCH融合实战:从零构建高精度语音质检系统

本文详细介绍了如何将FunASR与FreeSWITCH融合,构建高精度语音质检系统。通过实时语音听写技术,结合热词定制和多模型切换,实现客服中心等场景的自动化质检,显著提升识别准确率和效率。系统架构涵盖音频采集、识别处理和业务应用三层,支持负载均衡和性能优化,适用于工业级部署。

weixin_29198045的博客 980

Java 之 Map遍历并删除的几种方法对比

使用Iterator:适用于任何类型的Map,是最安全的方法。使用 Java 8 的removeIf方法:简洁且易于理解,适用于支持removeIf方法的集合。使用for-each循环和临时集合:避免,但需要额外的内存开销。使用Map的entrySet和remove方法:直接操作Map,但需要注意避免。

weixin_43841461的博客 3451

【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)

案例背景:(共8页精讲) 在《【UDS诊断描述文件CDD】-3.2-编辑CDD给$22服务创建一个带一个Data的DID(dataIdentifier)数据标识符》中,适应使用CANdela Studio在CDD中创建一个带一个Data的DID(dataIdentifier)数据标识符,见图0-1。现在我们将该CDD文件导入到CFG(DaVinci Configurator),看看配置会发生哪些变化。 图0-1 目录 1 将诊断描述文件CDD导入CFG(DaVinci Configurator.

「汽车电子助手」的博客 1633

在c++中使用for循环遍历map并删除map中的元素的注意事项

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34258078的博客 5623

model_optimizer将pi05端到端延时进一步优化到68.13ms了

目前在保持灵活性和性能之间找到一个较好的平衡。vit, llm仍然使用onnx->trt_engine的路径,量化可以通过https://github.com/NVIDIA/Model-Optimizer.git支持。同时支持通过cutedsl手写算子进行进一步优化denoise因为步数多,kernel launch多,因此完全通过手写融合算子实现,将所有steps进行一次大的cuda graph capture.

happyAnger6的专栏 59

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

【C++】 vector、set、map容器循环删除元素

【代码】【C++】 vector、set、map容器循环删除元素。

nx二次开发 958

18、改进的LSTM用于污染物浓度预测

本文探讨了改进的长短期记忆网络(MLSTM)在空气污染预测中的应用,重点分析了其对印度泰米尔纳德邦五个城市(金奈、塞勒姆、哥印拜陀、马杜赖和图蒂科林)的PM2.5、PM10、SO2和NO2四种污染物浓度的预测效果。通过与传统LSTM模型的对比实验,结果显示MLSTM在预测准确性和执行效率方面均优于LSTM。研究结果表明,MLSTM在空气质量预测领域具有较高的应用潜力,可为环境保护和空气质量管理提供有力支持。

j0k1l2m3n的博客 175

C++ STL vector list set map容器循环通过迭代器删除元素注意事项

stl中通过迭代器删除vector,list,set,map中的元素

hsy12342611的专栏 5224

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vector map迭代器失效问题

对于vector来说,如果使用普通迭代器(例如std::vector<int>::iterator)进行遍历和删除操作,当你删除一个元素后,后面的元素会向前移动填补空缺,导致当前迭代器指向的位置已经不再有效。因为在删除某个键值对后,其他键值对的位置可能发生变化,导致当前迭代器无法正确指向下一个要访问的元素。注意:C++11 引入了范围循环 for-each,但不适用于在迭代过程中删除元素的情况,因为它使用的是临时迭代器并不允许修改容器。当使用迭代器遍历容器并删除元素时,迭代器可能会失效。

折花刀的博客 647

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c语言vector+erase用法,vector与map的erase()函数详细解析

vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it)这是vector的内部机制所造成的,所以对vector进行erase的时候特别注意迭代器是否会失效!map则可以直接erase(it++);vector和map都不能将it++写在for循环中,而在循环体内erase(it)!void main(){vector v;v.p...

weixin_29876887的博客 574

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

vector和map的erase()函数

vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it),这是vector的内部机制所造成的,所以对vector进行erase的时候特别注意迭代器是否会失效。 map则可以直接erase(it++)。 vector和map都不能将it++写在for循环中,而在循环体内erase(it)!

qq450574900的专栏 297

C++容器在遍历时的删除问题

容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改。 有时要在遍历的同时删除一条数据,但是这样删除的时候程序会导致程序崩溃。 这个问题在GCC 中不会出现,而在VS2008,VS2010 中都有,其它更高VS版本未测试。 比如map 容器: map<int, string> dataMap; for (int i = 0; i < 10; ++i...

weixin_30839881的博客 1226

[STL] 循环中erase

sometimes,我们需要手写循环(相对于for_each)来erase容器内某些元素,新手经常会犯一些错误。这里总结一下比较常用的固定写法。 删除所有偶数项,并打印出删除的项 1. vector/queue 正确方法1: void erase(vector &v) { for(vector::iterator vi=v.begin();vi!=v.end();) {

jxkongyue的专栏 595

删除STL容器的元素

很久以前看《Effective STL》看到的。因为有点杂,值得整理一下。 1. 删除特定值的元素 1.1 序列容器 如vector,deque,string,其删除特定值的元素的方法是使用 erase-remove 用法。 // 对于vector,deque,string,使用 erase-remove 方法 c.erase(remove(c.begin(), c.end(), 999), c....

FinixLei的专栏 (https://github.com/FinixLei) 704

stl之map

stl之map erase方法的正确使用 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 eg: map<string,string> mapTest; typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key); map...

aobu0171的博客 84

C++存储数据结构List、CArray、Vector和Map使用分析

list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。在STL中,list和vector一样,是两个常被使用的容器。和vector不一样的是,list不支持对元素的任意存取。list中提供的成员函数与vector类似,不过list提供对表首元素的操作push_front、pop_front,这是vector不具备的。和vector另一点不同的是,list的迭代器不会存在失效的情况,

董盼山的专栏 6417

map,vector 等容器内容的循环删除问题(C++)

map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除: for(auto p=list.begin();p!=list.end();p++) list.erase(p); 类似的方式,会出错的,不信你调试试试 :) 这里使用了一个`iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`...

weixin_30908707的博客 248

[C++]顺序容器和关联容器的删除

概述 一个合格的容器(Container)必须支持增删改查,C++的顺序容器和关联容器也不例外。 不同于insert和search,erase操作涉及到多种情况,尤其是和迭代器相结合的时候。 本文总结常用C++常用容器的erase的正确做法。 顺序容器:vector,dequeue,list,string 关联容器:set,map,unordered_set, unordered_map...

六天 1549

C++ STL中map.erase(it++)用法原理解析

之前在程序循环中使用map::erase函数时,误搬了vector::erase的用法,导致Server down掉了,好在在测试环境就及时发现了问题,在上线前进行了补救。 一下总结一下map::erase的正确用法。 首先看一下在循环中使用vector::erase时我习惯的用法:for(vector<int>::iterator it = vecInt.begin(); it != vecI

学习路上的点点滴滴 2万+
上一篇: Cocos2d-x学习(十七):Cocos2d-x建工程时避免copy文件夹和库
下一篇: 一个比较完善的C++ Singleton模式类
oneRain
博客等级 码龄16年 680粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值