我在删除列表的最后一个元素时遇到问题。由于某种原因,它会删除倒数第二个元素。在这个网站上有一个非常有用的帖子关于如何做到这一点,它让我这么远,但我仍然有问题。我只是不太明白这是怎么回事?
如果我将iter++
更改为++iter
,则在删除最后一个元素时,尝试访问无效信息时会出错。
std::list<Recipe>::iterator iter = recipes.begin();
while(iter != recipes.end() )
{
if(iter->GetName() == buffer)
{
recipes.erase(iter++);
}
else
{
iter++;
}
}
任何帮助?
答案 0 :(得分:4)
当你在c ++中调用删除迭代器时它将变为无效的迭代器,你不应该这样做..
你是正确的使用擦除,但你应该擦除它,因为擦除返回迭代器到下一个元素:
iter = recipes.erase(iter);
所以这段代码应该有效:
while(iter != recipes.end() )
{
if(iter->GetName() == buffer)
{
iter = recipes.erase(iter);
}
else
{
iter++;
}
}
现在很可能,你的相等是不正确的,我们不知道什么缓冲区或GetName()返回什么,你可能有两个?