0

リストの最後の要素を削除するのに問題があります。何らかの理由で最後から 2 番目の要素を削除します。このサイトには、その方法に関する非常に役立つ投稿があり、ここまでたどり着きましたが、まだ問題があります。これがどのように機能しないのかよくわかりませんか?

に変更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++ でイテレータの削除を呼び出すと、イテレータとして無効になるため、この方法で行うべきではありません。

消去を使用するのは正しいですが、消去はイテレータを次の要素に返すため、イテレータに消去を割り当てる必要があります。

iter = recipes.erase(iter);

したがって、このコードは機能するはずです:

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

}

リスト::消去

等式が間違っている可能性が非常に高く、バッファが何であるか、または GetName() が返すものがわからない場合、おそらくそれらのうちの 2 つを取得できますか?

于 2013-05-27T16:45:54.420 に答える