さて、反復処理中のリファレンスの STL リストがあります。この関数には 3 つの同等の部分があります。この関数は wstring をパラメーターとして取り、適切な if ステートメントを実行します。コードを 1 つの 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++;
}
}
消去を呼び出すと、現在のイテレータが無効になるという印象を受けました。したがって、要素を消去すると、次の有効な反復子が返されます。どこが間違っていますか?
編集:すべての迅速な助けに感謝します。問題は修正されました。私はフレネルのソリューションを利用しましたが、それは素晴らしく機能しました。