teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

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

2019/11/30 07:33

投稿

kurara674
kurara674

スコア29

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  纏めて消す場合はこれで行けるかと。
5
5
  ```C++
6
- for (auto itr = m_Clist.begin(); itr != m_Clist.end();) {
6
+ for (auto itr = m_Clist.begin(); itr != m_Clist.end(); ++itr) {
7
7
  Bullet *bullet = (*itr);
8
8
  delete bullet;
9
9
  }
@@ -23,6 +23,6 @@
23
23
  itr = bullet_list_.erase(itr);
24
24
  continue;
25
25
  }
26
- itr++;
26
+ ++itr;
27
27
  }
28
28
  ```

1

プログラムの追加

2019/11/30 07:33

投稿

kurara674
kurara674

スコア29

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