0

さて、反復処理中のリファレンスの 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++;
      }
    }

消去を呼び出すと、現在のイテレータが無効になるという印象を受けました。したがって、要素を消去すると、次の有効な反復子が返されます。どこが間違っていますか?

編集:すべての迅速な助けに感謝します。問題は修正されました。私はフレネルのソリューションを利用しましたが、それは素晴らしく機能しました。

4

3 に答える 3

0

追加したいかもしれません

continue;

あなたの消去後。

于 2013-10-01T14:13:29.310 に答える