用C++编写的std :: erase

Shu*_*dol -1 c++ stl list erase

我对std::eraseC++的功能感到困惑.

下面的代码在std::erase调用之前和之后获得相同的输出.但是如果在执行std::erase输出之后遍历列表,则不显示擦除的值.帮助我理解std::erase.

#include<bits/stdc++.h>
using namespace std;

int main()
{
    list<int> v;
    v.push_back(12);
    v.push_back(10);
    v.push_back(20);

    list<int>::iterator it;
    it = v.begin();
    printf("%u %d\n", it, *it);
    v.erase(it);
    printf("%u %d\n", it, *it);

    for(it= v.begin(); it!= v.end(); it++)
        cout<< *it<<" ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

"Memory address" 12  
"Memory Address" 12  
10 20
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 9

erase使您给它的迭代器无效(加上可能的其他迭代器,具体取决于容器).
之后使用和取消引用此迭代器是未定义的行为.