我很难理解为什么代码会表现出这种行为。首先,我已经阅读了相关的答案材料,但仍然觉得解释有点高深。所以我想知道是否有人能够用简单的方式来解释一下。
好的,所以我正在从列表中删除元素。
列表包含既有奇数又有偶数的int元素。这部分我理解。 以下是我最初编写的从列表中删除奇数的代码:
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
使用这段代码,程序根本无法编译,并显示一条消息说明程序必须关闭。
当我写下这段代码时,erase函数就会起作用:
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
i = lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
我只需要理解为什么当我编写 i=lNo.erase(i) 而不是 lNo.erase(i) 时程序能够正常工作?
简洁明了的答案将会非常感激。 我知道不同的容器有不同的约束条件,那么我原来的代码违反了哪个约束条件呢?