for (int i=0;i<matSize;i++)
{
if(condition[i]==1)
{
displacement.erase (displacement.begin()+i);
}
}
このループの何が問題になっていますか?条件を満たす変位ベクトルから要素を削除しようとしています。消去をループで機能させることができませんでした。誰かが私を助けることができますか?ありがとう。
これが C++ であり、std::vector を使用しているとします。
ベクトルに 5 つの要素があるとします。1つ消したら何枚残る?次にチェックするのはどれで、どれくらい数えますか?
より明確にするために、それが
[0, 10, 20, 30, 40]
10 と 20 を消去したい場合、i
が 1 の場合、10 をテストして消去します。今ベクトルは
[0, 20, 30, 40]
次に、2 にインクリメントi
し、30 をチェックします。20 を完全に見逃しています。そして、最後を超えて反復すると (つまり、いつi
4 になるか)、より大きな問題が発生します。
解決策は簡単です。小さくて単純なベクトルでコードを試し、どの要素をテストして消去しているかを確認することで、これらすべてを発見できたはずです。