std::map在遍历的过程中删除item的最好方式

来源:互联网 发布:microsoft visio mac 编辑:程序博客网 时间:2024/06/07 05:19

看到了一种新的方法:

#include <map>#include <string>void erase_1()//以前都是用的这个笨方法.{    std::map<int, int> cache;    for (int i = 1; i < 10; ++i)        cache[i] = i * 10;    //在遍历的过程中删除某个节点    for (bool reSerarch = true; reSerarch;)    {        reSerarch = false;        for (auto itr = cache.begin(); itr != cache.end(); ++itr)        {            if (itr->first == 6)            {                cache.erase(itr);                reSerarch = true;                break;            }        }    }    return;}void erase_2()//在看了某同事的代码后,发现,竟然还有这种操作,-_-!{    std::map<int, int> cache;    for (int i = 1; i < 10; ++i)        cache[i] = i * 10;    //在遍历的过程中删除某个节点    for (auto itr = cache.begin(); itr != cache.end(); ++itr)    {        if (itr->first == 6)        {            itr = cache.erase(itr);        }    }    /* C++11    (1) iterator  erase (const_iterator position);    (2) size_type erase (const key_type& k);    (3) iterator  erase (const_iterator first, const_iterator last); */    return;}int main(){    erase_1();    erase_2();    return 0;}
完。

原创粉丝点击