我很难理解为什么代码会这样。首先,我已经阅读了相关的回答材料,仍然发现解释有点先进。所以我想知道是否有人可以用简单的方式解释这一点。
好的,所以我正在从列表中删除元素。
该列表包含奇数和偶数的 int 元素。这部分我明白了。这是我最初编写的用于从列表中删除奇数的代码
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
使用此代码,程序根本无法编译,我阅读了一条消息,指出程序必须关闭。
当我编写此代码时,擦除功能起作用:
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) 时程序可以工作?
一个简单简洁的答案将不胜感激。我知道不同的容器有不同的约束,那么我在原始代码中违反了哪个约束?