上級 › vectorの要素をループ中に削除するとイテレータが無効化されるバグ › パターン5
vectorの要素をループ中に削除するとイテレータが無効化されるバグ
std::vectorの要素をfor文の中でeraseしながら、そのままイテレータをインクリメントし続けてしまうバグです。
1 #include <iostream> 2 #include <vector> 3 int main() { 4 std::vector<int> vals = {2, 4, 5, 9}; 5 for (auto it = vals.begin(); it != vals.end(); _____________________________________________) { ^ 6 if (*it % 2 == 0) { 7 vals.erase(it); 8 } 9 } 10 for (int v : vals) std::cout << v << " "; 11 std::cout << std::endl; 12 return 0; 13 }
出力: 4 5 9 (2番目の偶数4が消えずに残る)期待: 5 9
空欄を埋めてコンパイル・実行を通す
vector::eraseは呼んだ時点でそのイテレータ自身を無効にします。
次の問題