手机
当前位置:查字典教程网 >编程开发 >C语言 >c++ map,mutimap删除问题分析
c++ map,mutimap删除问题分析
摘要:这样删除会导致程序内存覆盖等一系列不可预知的bug复制代码代码如下:map::iteratoriter;for(iter=mm.begin(...

这样删除会导致程序内存覆盖等一系列不可预知的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.

}

}

【c++ map,mutimap删除问题分析】相关文章:

C++ Explicit关键字详细解析

c++ 探讨奶牛生子的问题

c 调用python出现异常的原因分析

memset函数的使用分析

Linux vmstat命令实战详细解析

CFileDialog设置多选的问题解决

shared_ptr线程安全性全面分析

浅谈VC中预编译的头文件放那里的问题分析

基于Protobuf C++ serialize到char*的实现方法分析

C++ 中dynamic_cast&lt;&gt;的使用方法小结

精品推荐
分类导航