迭代器删除元素的思考

stl 迭代器在删除容器元素的时候,节点类的和链表类的是有差异的:
一. 节点类

    map num_map;

    num_map.insert(make_pair(1,2));
    num_map.insert(make_pair(2,2));

    for (auto iter = num_map.begin();iter != num_map.end();)
    {
        if (iter->first == 1)
        {
            num_map.erase((iter)++->first);
        }
        else
        {
            iter++;
        }
    }

如果在erase的时候没有++,或者++在iter的前边,则dump;
二. 链表类

三. 我们再来看下++操作的执行时机

#include 
using namespace std;

int global = 0;

void print(int para)
{
    cout << "in the print function:" << endl;
    cout << "para : " << para << endl;
    cout << "global : " << global << endl;
    cout << "out the print function:" << endl;
}


int main()
{
    cout << "global is :" << global << endl;
    print(global++);
}

global is :0
in the print function:
para : 0
global : 1
out the print function:

你可能感兴趣的:(迭代器删除元素的思考)