时间:2021-05-20
这样删除会导致程序内存覆盖等一系列不可预知的bug
复制代码 代码如下:
map<string, string>::iterator iter;
for ( iter = mm.begin();iter != mm.end(); iter ++ )
{
if ( iter->second == something )
{
mm.erase( iter );
}
}
原因:当erase掉iter后,继续执行iter++,这个时候就乱套了
正确方法:
复制代码 代码如下:
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
mm.erase( iter++ );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}
可能有人不理解mm.erase(iter++)
其实和这个是一样的
复制代码 代码如下:
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
map<string, string>::iterator iter_erase;
iter_erase = iter++ //先保存后++再删除
mm.erase( iter_erase );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了c++中map的基本用法和嵌套用法。分享给大家供大家参考。具体分析如下:C++中map容器提供一个键值对容器,map与multimap差别仅仅在于
C语言和C++的区别(1)面向过程语言和面向对象语言C语言是面向过程语言,即先分析出解决问题的步骤然后再将这些步骤一一实现C++是面向对象语言,即把问题分成若干
本文详细叙述了C/C++的位操作,这是C/C++程序设计中非常重要的概念。本文实例对于C/C++初学者来说也具有很好的复习与参考价值。具体分析如下:C/C++对
静态代码分析工具可简化编码过程,检测出错误并帮助修复。PVS-Studio是一个用于C/C++的静态代码分析工具。该团队检测了200多个C/C++开源项目,包括
C++实际开发的过程会经常使用到map。map是一个key-value值对,key唯一,可以用find进行快速的查找。其时间复杂度为O(logN),如果采用fo