私はvector
をループし、毎回アイテムを削除したいと考えています。私はerase-remove idiomを使うべきだと思います。私は、vector
のerase
がそのイテレータを無効にすると信じています。その場合、while
ループでこのイディオムを使用するにはどうすればよいですか?erase-removeイディオムを使用してループ内のイテレータをインクリメントする方法は?
std::vector<int> vec = { 3, 6, 7, 5 };
auto itr = vec.begin();
while (itr != vec.end())
{
// I'll remove a different element each iteration of the loop.
// Hard-coded "7" here for simplicity:
auto position = std::remove(vec.begin(), vec.end(), 7);
vec.erase(position);
++itr;
}
コードの目的はvector
をループにし、素子を毎回削除:
ここで壊れた例です。私はベクトルのサイズが各繰り返しの後に変わるので、while
ループとイテレータを使います。各反復で最大の要素を削除しますが、単純化するためにそのコードを表示していません。したがって、要素は7,6,5,3の順番で削除されます。このコードも表示されません。
このコードの目的は何ですか?あなたは 'itr'で何もしていないようです。 –
イレーズイディオムと 'vector :: erase'は異なるものですが、後者は前者を使うかもしれません – jaggedSpire
...リスト内の項目の半分をランダムに削除しようとしていますか? – jaggedSpire