0
for (int i=0;i<matSize;i++) 
{

    if(condition[i]==1)
    {
    displacement.erase (displacement.begin()+i);
    }

 }

このループの何が問題になっていますか?条件を満たす変位ベクトルから要素を削除しようとしています。消去をループで機能させることができませんでした。誰かが私を助けることができますか?ありがとう。

4

1 に答える 1

0

これが C++ であり、std::vector を使用しているとします。

ベクトルに 5 つの要素があるとします。1つ消したら何枚残る?次にチェックするのはどれで、どれくらい数えますか?

より明確にするために、それが

[0, 10, 20, 30, 40]

10 と 20 を消去したい場合、iが 1 の場合、10 をテストして消去します。今ベクトルは

[0, 20, 30, 40]

次に、2 にインクリメントiし、30 をチェックします。20 を完全に見逃しています。そして、最後を超えて反復すると (つまり、いつi4 になるか)、より大きな問題が発生します。

解決策は簡単です。小さくて単純なベクトルでコードを試し、どの要素をテストして消去しているかを確認することで、これらすべてを発見できたはずです。

于 2013-01-07T16:46:12.867 に答える