为什么以下代码会产生断言错误: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();
}
你想要做的是:
#include <list>
using namespace std;
int main()
{
list<int> a;
a.push_back(1);
list<int>::iterator iter=a.begin();
iter = a.erase(iter);
}
给定集合上的迭代器在更改a
时变为无效a
,例如通过删除元素。
擦除iter
时它无效。我认为无效的迭代器不能用于除了分配给它们之外的任何东西,甚至不能将它们与任何东西进行比较。您可能想使用
iter = a.end();
擦除后迭代器无效。在您的情况下,擦除本身会在您删除最后一个元素时返回(您将其删除)结束迭代器