STL迭代器:断言错误

时间:2012-12-02 17:34:45

标签: c++ stl iterator erase

为什么以下代码会产生断言错误:Expression: list iterators incompatible

#include <list>
using namespace std;

int main()
{
    list<int> a;
    a.push_back(1);
    list<int>::iterator iter=a.begin();
    a.erase(iter);

    iter==a.end();
}

4 个答案:

答案 0 :(得分:1)

你想要做的是:

#include <list>
using namespace std;

int main()
{
    list<int> a;
    a.push_back(1);
    list<int>::iterator iter=a.begin();
    iter = a.erase(iter);
}

答案 1 :(得分:0)

a更改时,给定集合a上的迭代器变为无效,例如删除元素。

答案 2 :(得分:0)

删除iter时,它会失效。我认为无效的迭代器不能用于除了分配给它们之外的任何东西,甚至不能将它们与任何东西进行比较。您可能想要使用

iter = a.end();

答案 3 :(得分:0)

擦除后迭代器无效。在你的情况下,擦除本身会在你删除最后一个元素

时返回(删除它)结束迭代器