gpt4 book ai didi

c++ - 迭代时无法通过列表删除项目

转载 作者:行者123 更新时间:2023-11-27 23:12:40 25 4
gpt4 key购买 nike

好的,我有一个正在遍历的引用的 STL 列表。该函数具有三个等效部分。该函数将 wstring 作为参数,并运行适当的 if 语句。我已将代码缩减为一个 if 语句以尝试使其正常工作。

所以,我检查一下作为参数传入的内容。然后我检查 ClassItem 是否是某种动物。如果是,我会检查它是否饿了,然后将其从列表中删除。我现在只是想避免段错误,但似乎做不到。

    list<ClassItem *>::iterator i = Items.begin();

while(i != Items.end())
{
if(!AnimalType.compare(L"tiger"))
{
if((*i)->IsAnimalType(L"tiger"))
{
if((*i)->IsHungry())
{
i = Items.erase(i);

}
}
else
{
++i;
}
}
// I have tried removing this
else
{
i++;
}
}

我的印象是当我调用删除时当前迭代器无效。所以,如果我删除一个元素,我会返回下一个有效的迭代器。我哪里错了?

编辑:感谢您提供的所有快速帮助。问题已解决。我已经使用了 phresnel 的解决方案并且效果非常好。

最佳答案

你最好使用 std::list::remove_if用一个合适的谓词。这完全避免了手动循环,减少了错误的范围,并有助于消除或至少定位问题的根源,因为只要您的谓词是正确的,您就可以相信这个习惯用法是正确的。

bool badAnimal(ClassItem * item) 
{
// return true if animal is to be removed
}

Items.remove_if(badAnimal);

关于c++ - 迭代时无法通过列表删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com