回答編集履歴
1
erase 後のイテレータが無効であることを追記
test
CHANGED
@@ -59,3 +59,39 @@
|
|
59
59
|
|
60
60
|
|
61
61
|
for(range) 内で要素を削除するのは、たぶん不可能でしょうね。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
## 10/2 追記
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
for (auto a = array.end(); a != --array.begin(); a--) {
|
70
|
+
|
71
|
+
if (a->num == 1) {
|
72
|
+
|
73
|
+
array.erase(a);
|
74
|
+
|
75
|
+
}
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
```
|
80
|
+
|
81
|
+
auto a = array.end(); の a 利用以外に問題がないわけではありません。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
array.erase(a); 実行後にイテレータ a を使用してはいけません。
|
86
|
+
|
87
|
+
C++11/C++14
|
88
|
+
|
89
|
+
23.3.6.5 vector modifiers
|
90
|
+
|
91
|
+
iterator erase(const_iterator position);
|
92
|
+
|
93
|
+
iterator erase(const_iterator first, const_iterator last);
|
94
|
+
|
95
|
+
Effects: Invalidates iterators and references at or after the point of the erase.
|
96
|
+
|
97
|
+
規格上は vector の erase を実行したら iterator は無効です。
|