源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c++ map,mutimap删除问题分析

  • 时间:2021-08-10 08:05 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c++ map,mutimap删除问题分析
这样删除会导致程序内存覆盖等一系列不可预知的bug
[u]复制代码[/u] 代码如下:
map<string, string>::iterator iter; for ( iter = mm.begin();iter != mm.end(); iter ++ ) { if ( iter->second == something ) { mm.erase( iter ); } }
原因:当erase掉iter后,继续执行iter++,这个时候就乱套了 正确方法:
[u]复制代码[/u] 代码如下:
for (iter = mm.begin();iter != mm.end();) { if ( iter->second == something ) { mm.erase( iter++ ); } else { iter++; // Use Pre Increment for efficiency. } }
可能有人不理解mm.erase(iter++) 其实和这个是一样的
[u]复制代码[/u] 代码如下:
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. } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部