0

为什么以下代码会产生断言错误: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

4 回答 4

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);
}
于 2012-12-02T17:37:45.187 回答
0

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

于 2012-12-02T17:36:22.537 回答
0

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

iter = a.end();
于 2012-12-02T17:40:26.007 回答
0

擦除后迭代器无效。在您的情况下,擦除本身会在您删除最后一个元素时返回(您将其删除)结束迭代器

于 2012-12-02T17:41:40.137 回答