Почему следующий код вызывает ошибку утверждения: 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();
итератор недействителен после стирания. в вашем случае само удаление возвращает (вы его отбрасываете) конечный итератор, как вы удаляли последний элемент