イレーズはイテレータを自動的に前方に移動させるので、複数のオカレンスを削除するには、これを避ける必要があるので、連続する要素を比較できます。だからこそ、私は通常の操作を行います。C++ 11:ベクトルからの複数のオカレンスを消去します。ベストプラクティスはどれですか?
auto i = vect.begin();
while (i!=vect.end())
if (*i==someValue)
vect.erase(i);
else
++i;
しかし、私はまた、このように、forループでそれを行うことができれば、私は思っていた:--i部分は少し奇妙に見えるが、それは動作します
for (auto i=vec.begin(); i!=vec.end(); ++i)
if (*i==someValue){
vec.erase(i);
--i;
}
。それは悪い習慣でしょうか?悪いコード?間違いを起こしやすい?それともどちらのオプションを使うのも正しいですか?
ありがとうございました。
どちらも信頼できません。これを行う:https://stackoverflow.com/questions/3938838/erasing-from-a-stdvector-while-doing-a-for-each – Ryan
なぜ彼らは信頼できないのですか?それが正しいのであれば、私はむしろ自分の選択肢に固執したいと思う。しかし、なぜイテレータが無効にならないようにするために 'i = vect.erase(i) 'を割り当てる必要があるかを除いて、なぜ正しくないのか分かりません。 –