好的,我有一个我正在迭代的引用的 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的解决方案,效果很好。