c++ map,mutimap删除问题分析_C语言教程-查字典教程网
c++ map,mutimap删除问题分析
c++ map,mutimap删除问题分析
发布时间:2016-12-28 来源:查字典编辑
摘要:这样删除会导致程序内存覆盖等一系列不可预知的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语言学习
    热门C语言学习
    编程开发子分类