STL迭代器失效

2020-08-31  本文已影响0人  钟离惜

迭代器在移除元素时迭代器可能失效。
vector如果开辟新的内存时迭代器可能失效。
新增元素时尾迭代器可能失效。
......

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
using namespace std;

int main()
{
    {
        vector<int> vec;
        vec.push_back(1);
        vec.push_back(2);
        vector<int>::iterator ite = vec.begin();
        cout << "vec:" << *ite << endl;
        ite = vec.erase(ite);
        //vec.erase(ite);
        cout << "vec:" << *ite << endl;
    }
    cout << endl;
    {
        list<int> List;
        List.push_back(1);
        List.push_back(2);
        list<int>::iterator ite = List.begin();
        cout << "List:" << *ite << endl;
        ite = List.erase(ite);
        //List.erase(ite);
        cout << "List:" << *ite << endl;
    }
    cout << endl;
    {
        deque<int> Deque;
        Deque.push_back(1);
        Deque.push_back(2);
        deque<int>::iterator ite = Deque.begin();
        cout << "Deque:" << *ite << endl;
        ite = Deque.erase(ite);
        //Deque.erase(ite);
        cout << "Deque:" << *ite << endl;
    }
    cout << endl;
    {
        map<int, int> nnmap;
        nnmap.insert(map<int, int>::value_type(1, 1));
        nnmap.insert(map<int, int>::value_type(2, 2));
        map<int, int>::iterator ite = nnmap.begin();
        cout << "nnmap:" << ite->first << endl;
        ite = nnmap.erase(ite);
        //nnmap.erase(ite);
        cout << "nnmap:" << ite->first << endl;
    }
    cout << endl;
    {
        set<int> Set;
        Set.insert(1);
        Set.insert(2);
        set<int>::iterator ite = Set.begin();
        cout << "Set:" << *ite << endl;
        ite = Set.erase(ite);
        //Set.erase(ite);
        cout << "Set:" << *ite << endl;
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读