[解決済み] C++ : リストのイテレータがインクリメントされない
2022-02-07 19:47:51
質問
リストの最後の要素を消去しようとすると、このエラーが発生します。デバッグしてみたところ、原因と場所がわかりましたので、以下にコードを示します。
for(Drop_List_t::iterator i = Drop_System.begin(); i != Drop_System.end() && !Drop_System_Disable; /**/)
{
if(Player->BoundingBox.Intersect(&(*i)->BoundingBox))
{
i = Drop_System.erase(i);
}
++i; //List iterator crashes here if last entry was deleted
}
何が間違っているのかがわからない...。何かいい方法はないでしょうか?
解決方法は?
を理解していないため、アルゴリズムに欠陥があります。
erase
を返します。
を使用した場合
erase
は、イテレータが指す要素を削除し、次の要素へのイテレータを返します。
リストのすべての要素に対して反復処理を行いたい場合、リスト内のすべての要素に対して反復処理を行うには、常に
erase
が使用された場合、それ以上インクリメントしてはいけません。
これは 通常 というコードが表示されるはずです。
if (Player->BoundingBox.Intersect(i->BoundingBox)) {
i = Drop_System.erase(i);
}
else {
++i;
}
そして、これであなたが遭遇している問題をきちんと解決しています! なぜなら
erase
が最後の要素です。
erase
と同じイテレータを返します。
end
つまり、最後の要素の1つ前を指すイテレータです。このイテレータは
とする。
は決してインクリメントされません (リストが空でない場合はデクリメントされることがあります)。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++