当前位置:  编程技术>c/c++/嵌入式

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

    来源: 互联网  发布时间:2014-10-11

    本文导语:  这样删除会导致程序内存覆盖等一系列不可预知的bug 代码如下: map::iterator iter; for ( iter = mm.begin();iter != mm.end(); iter ++ ) { if ( iter->second == something ) { mm.erase( iter ); } } 原因:当erase掉iter后,继续执行iter++,这个时候就乱套了 正确方...

这样删除会导致程序内存覆盖等一系列不可预知的bug

代码如下:

map::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::iterator iter_erase;
iter_erase = iter++ //先保存后++再删除
mm.erase( iter_erase );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}

    
 
 

您可能感兴趣的文章:

  • C++ Maps 成员 swap():交换两个map
  • 基于C++ map中key使用指针问题的详解
  • C++ Maps 成员 end():返回指向map末尾的迭代器
  • C++ Maps 成员 rend():返回一个指向map头部的逆向迭代器
  • C++ Maps 成员 get_allocator():返回map的配置器
  • C++ Maps 成员 rbegin():返回一个指向map尾部的逆向迭代器
  • C++ Maps 成员 size():返回map中元素的个数
  • C++ Maps 成员 empty():如果map为空则返回true
  • C++ Maps 成员 begin():返回指向map头部的迭代器
  • C++ Maps 成员 find():查找一个元素
  • C++ Maps 成员 clear():删除所有元素
  • C++ Maps 成员 count():返回指定元素出现的次数
  • C++ Maps 成员 max_size():返回可以容纳的最大元素个数
  • C++ Maps 成员 erase():删除一个元素
  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • C++ Maps 成员 insert():插入元素
  • C++ Maps 成员 upper_bound():返回键值>给定元素的第一个位置
  • C++ Maps 成员 lower_bound():返回键值>=给定元素的第一个位置
  • C++ Maps 成员 equal_range():返回特殊条目的迭代器对
  • Linux c++库boost unordered_map数据插入及查找代码举例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.jar类attributes的类成员方法: map定义及介绍
  • 请问LINUX下有没有跟在windows下一样的hash_map使用?比如VS2005下有微软实现的hash_map.
  • java命名空间javax.swing.text.html类html.tag的类成员方法: map定义及介绍
  • java集合map取key使用示例 java遍历map
  • java命名空间java.util接口map<k,v>的类成员方法: isempty定义及介绍
  • 请问,system.map有用吗?
  • java命名空间java.util接口map<k,v>的类成员方法: clear定义及介绍
  • gcc编译的程序生成的map文件问题
  • java命名空间java.util接口map<k,v>的类成员方法: size定义及介绍
  • Java用for循环Map详细解析
  • java命名空间java.util接口map.entry<k,v>的类成员方法: getkey定义及介绍
  • 请问哪个方法可以检查Map中有某个键存在?
  • java命名空间java.util接口map<k,v>的类成员方法: hashcode定义及介绍
  • linux中如何用shmget在共享内存中分配一个Map类型的空间?
  • java命名空间java.util接口map.entry<k,v>的类成员方法: getvalue定义及介绍
  • Google Maps Navigation
  • java命名空间java.util接口map<k,v>的类成员方法: entryset定义及介绍
  • jQuery Google Maps
  • java命名空间java.util接口map<k,v>的类成员方法: containsvalue定义及介绍
  • Google 地图 API Google Map
  • java命名空间java.util接口map<k,v>的类成员方法: equals定义及介绍
  • system.map文件的作用和理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3