STL 迭代器:断言错误

STL iterator: Assertion Error

本文关键字:错误 断言 迭代器 STL      更新时间:2023-10-16

为什么下面的代码会产生断言错误: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();

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