List Iterator删除最后一个元素

时间:2013-05-27 16:40:17

标签: c++ list iterator

我在删除列表的最后一个元素时遇到问题。由于某种原因,它会删除倒数第二个元素。在这个网站上有一个非常有用的帖子关于如何做到这一点,它让我这么远,但我仍然有问题。我只是不太明白这是怎么回事?

如果我将iter++更改为++iter,则在删除最后一个元素时,尝试访问无效信息时会出错。

std::list<Recipe>::iterator iter = recipes.begin();

while(iter != recipes.end() )
{
    if(iter->GetName() == buffer)
    {
        recipes.erase(iter++);
    }
    else
    {
        iter++;
    }

}

任何帮助?

1 个答案:

答案 0 :(得分:4)

当你在c ++中调用删除迭代器时它将变为无效的迭代器,你不应该这样做..

你是正确的使用擦除,但你应该擦除它,因为擦除返回迭代器到下一个元素:

iter = recipes.erase(iter);

所以这段代码应该有效:

while(iter != recipes.end() )
{
    if(iter->GetName() == buffer)
    {
        iter = recipes.erase(iter);
    }
    else
    {
        iter++;
    }

}

list::erase

现在很可能,你的相等是不正确的,我们不知道什么缓冲区或GetName()返回什么,你可能有两个?