map::erase函数在不同版本stl中的差异


1. C++98和C++11标准

http://www.cplusplus.com/reference/map/map/erase/

2. pj stl(windows)

map::erase函数的windows实现版本(C++11标准)会返回一个map::iterator:

iterator  map::erase(const_iterator _Where);
iterator map::erase(const_iterator _First, const_iterator _Last);
size_type map::erase(const key_type& _Keyval);

3. sgi stl(linux)

map::erase函数的linux实现版本(C++98标准)会返回一个void:

void      map::erase(iterator __position);
void map::erase(iterator __first, iterator __last);
size_type map::erase(const key_type& __x);

map::erase函数的正确使用方式


map::erase函数的正确使用方式:

typedef std::map<int, int>           KG_TestMap;
typedef std::map<int, int>::iterator KG_TestMapIter; std::map<int, int> mapTest; for (KG_TestMapIter iter = mapTest.begin(); iter != mapTest.end();)
{
mapTest.erase(iter++);
}

这种方法利用了后++的特性,执行mapTest.erase(iter++)语句分成了两个过程:
       • 后++操作将为当前iter保存一个副本tmp,然后递增当前iter指向下一个元素,最后返回该副本tmp

• 调用map::erase函数,tmp所指向的元素。

// code in pj stl
_Myiter operator++(int)
{ // postincrement
_Myiter _Tmp = *this;
++*this;
return (_Tmp);
} // code in sgi stl
_Self operator++(int)
{
_Self __tmp = *this;
    _M_increment();
    return __tmp;
}

map::erase陷阱的更多相关文章

  1. 关于map::erase的使用说明

    C++ 中经常使用的容器类有vector,list,map.其中vector和list的erase都是返回迭代器,但是map就比较不一样. 当在循环体中使用map::erase语句时,为了能够在任何机 ...

  2. [转] C++ STL中map.erase(it++)用法原理解析

    总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.be ...

  3. vector.erase();vector.clear();map.erase();

    vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...

  4. C++ std::map::erase用法及其陷阱

    1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string ...

  5. map erase iterator

    错误写法: map<int, int> m; for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) ...

  6. STL的erase()陷阱-迭代器失效总结

    下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...

  7. 【转载】STL 的 erase() 陷阱-迭代器失效总结

    下面材料整理自Internet&著作. TL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.se ...

  8. 面试题:JS中map的陷阱

    题目: ['2', '3', '4'].map(parseInt); 请说出上面代码的执行结果 错误回答: [2, 3, 4] 真正答案: [2, NaN, NaN] 解析: 因为 map 的算子是有 ...

  9. map 和 vector 的erase函数说明

    1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: (1) void erase (it ...

随机推荐

  1. json剥离

    String json=get("http://www.weather.com.cn/data/cityinfo/101010100.html"); JSONObject json ...

  2. CLion 2017 注册码

    注册码使用时间2017-2018 CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNz ...

  3. High-level NavMesh Building Components

    Here we introduce four high level components for the navigation system: //这里我们介绍四个高水平导航系统组件: NavMesh ...

  4. Mac 文件读写权限问题 OSError: Operation not permitted

    Mac在OS X 10.11以后加入了Rootless功能,主要是限制了root权限,阻止用户对部分路径下的目录进行更改.受到限制的有以下目录: /System /bin /sbin /usr (ex ...

  5. fzu 1330:Center of Gravity(计算几何,求扇形重心)

    Problem 1330 Center of Gravity Accept: 443    Submit: 830Time Limit: 1000 mSec    Memory Limit : 327 ...

  6. 列表框清屏/CListBox清空

    CListBox自带方法: MyListBox->ResetContent(); CListBox用法: 关联一个变量m_List,m_List.AddString("test&quo ...

  7. std__vector介绍

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  8. 666:放苹果(划分dp)

    666:放苹果 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示 ...

  9. HighCharts使用心得(转载)

    转载自:http://www.cnblogs.com/Olive116/p/3777021.html 1.  准备工作------下载HighCharts插件 跟ECharts一样,HighChart ...

  10. chrome/FF 解析遇到 { 行为一致,返回不一致

    测试的时候,发现一个问题,FF下: chrome 下: 你会发现,FF 在解析一直到返回的时候,都是把 {x:1} 当做一个语句块去解析的,而 chrome 在返回的时候返回了对象,把 {x:1} 当 ...