回答編集履歴

2

itrのインクリメント変更追加

2019/11/30 07:33

投稿

kurara674
kurara674

スコア29

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ```C++
10
10
 
11
- for (auto itr = m_Clist.begin(); itr != m_Clist.end();) {
11
+ for (auto itr = m_Clist.begin(); itr != m_Clist.end(); ++itr) {
12
12
 
13
13
  Bullet *bullet = (*itr);
14
14
 
@@ -48,7 +48,7 @@
48
48
 
49
49
  }
50
50
 
51
- itr++;
51
+ ++itr;
52
52
 
53
53
  }
54
54
 

1

プログラムの追加

2019/11/30 07:33

投稿

kurara674
kurara674

スコア29

test CHANGED
@@ -1,3 +1,55 @@
1
1
  例外なく全てであれば、clear();を使うのはいかがでしょうか?
2
2
 
3
3
  for文を使わないですし、早いかと・・・?
4
+
5
+
6
+
7
+ 纏めて消す場合はこれで行けるかと。
8
+
9
+ ```C++
10
+
11
+ for (auto itr = m_Clist.begin(); itr != m_Clist.end();) {
12
+
13
+ Bullet *bullet = (*itr);
14
+
15
+ delete bullet;
16
+
17
+ }
18
+
19
+ m_Clist.clear();
20
+
21
+ ```
22
+
23
+
24
+
25
+ もし何かの処理をしながら、消す場合はこちら。
26
+
27
+ 質問者様の場合、itrがnullptrになっているのが原因かと。
28
+
29
+ どこを指しているのかわからないのに、○○を消して!とeraseに行ってもどこ!?ってなりますから・・
30
+
31
+
32
+
33
+ ```C++
34
+
35
+ for (auto itr = m_Clist.begin(); itr != m_Clist.end();) {
36
+
37
+ Bullet *bullet = (*itr);
38
+
39
+ bullet->Step();
40
+
41
+ if (!bullet->IsActive()) {
42
+
43
+ delete bullet;
44
+
45
+ itr = bullet_list_.erase(itr);
46
+
47
+ continue;
48
+
49
+ }
50
+
51
+ itr++;
52
+
53
+ }
54
+
55
+ ```