【发布时间】:2012-12-28 10:57:06
【问题描述】:
我很难理解为什么代码会这样。首先,我已经阅读了相关的回答材料,仍然发现解释有点先进。所以我想知道是否有人可以用简单的方式解释这一点。
好的,我正在从列表中删除元素。
列表包含奇数和偶数的 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) 时程序可以工作?
一个简单简洁的答案将不胜感激。 我知道不同的容器有不同的约束,那么我在原始代码中违反了哪个约束?。
【问题讨论】:
标签: c++ list containers erase