• 经验之谈根据值寻找表中的数据,然后删除


    以下内容是老大的经验之谈。

    我就通过代码,把这经验具体化

    以下代码是不安全的,由于对STL的不熟悉,删除之后,迭代器加加,以为迭代器会指向下一个。最后,结果有可能是不对的

    #include<iostream>
    #include<map>
    using namespace std;
    
    int main()
    {
        map<char, int> mymap;
        map<char, int>::iterator iter;
        mymap['a'] = 10;
        mymap['b'] = 30;
        mymap['c'] = 30;
        mymap['d'] = 30;
        mymap['e'] = 50;
        int value = 30;
        
        iter = mymap.begin();
        while(iter!=mymap.end())
        {
            if(value==iter->second)
                mymap.erase(iter->first);
            iter++;
        }
    
        return 0;
    }

    下面代码加了一个队列来记录数据。得到的结果是安全的,肯定能把所有删除

    #include<iostream>
    #include<map>
    #include<deque>
    using namespace std;
    
    int main()
    {
        map<char, int> mymap;
        map<char, int>::iterator iter;
        mymap['a'] = 10;
        mymap['b'] = 30;
        mymap['c'] = 30;
        mymap['d'] = 30;
        mymap['e'] = 50;
        int value = 30;
        
        deque<char> mydeque;
    
        iter = mymap.begin();
        while(iter!=mymap.end())
        {
            if(value==iter->second)
                mydeque.push_back(iter->first);
            iter++;
        }
        while(mydeque.empty()==false)
        {
            mymap.erase(mydeque.front());
            mydeque.pop_front();
        }
    
        return 0;
    }

    像这种需要根据值来删除表中的数据,最保险的方法是先把index或者key找出来放在一个地方,也不会浪费很多空间。找完之后,再来根据index或key把数据清除。

    因为各种平台,各种语言,各种表,都是不同的人写的。删除数据之后,迭代器会变什么,是不确定的。除非你对正在使用的表十分十分十分熟悉。否则,不能因为不熟悉而导致错误

    我又学到东西了

  • 相关阅读:
    js 线程机制与事件处理机制
    js 对象高级
    js 函数高级
    js 基础总结
    JSON
    js BOM
    js DOM
    正则表达式
    splice()、push()、pop()、unshift()、pop()、reverse()等数组响应式方法
    Centos下执行make时出现mysql.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/yemsheng/p/3043533.html
Copyright © 2020-2023  润新知