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