zoukankan      html  css  js  c++  java
  • map::erase陷阱

    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;
    }
  • 相关阅读:
    JQuery UI
    JQuery 插件
    JQuery Ajax
    varchar和Nvarchar区别
    git冲突解决
    jquery ajax 提交信息后等待返回的提示信息
    Oracle错误 ORA-12560如何解决
    putty ssh连接老断
    myeclipse操作记录
    HTML与HTML5笔记
  • 原文地址:https://www.cnblogs.com/heartchord/p/4476792.html
Copyright © 2011-2022 走看看