0

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

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

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

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

}

有什么帮助吗?

4

1 回答 1

4

当您在 C++ 中调用 remove an iterator 时,它将成为无效的迭代器,您不应该这样做。

您使用擦除是正确的,但您应该将擦除分配给迭代器,因为擦除将迭代器返回到下一个元素:

iter = recipes.erase(iter);

所以这段代码应该可以工作:

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

}

列表::擦除

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

于 2013-05-27T16:45:54.420 回答