[解決済み】std::listを繰り返しながら要素を削除することは可能ですか?
2022-04-02 19:08:01
質問
次のようなコードがあります。
for (std::list<item*>::iterator i=items.begin();i!=items.end();i++)
{
bool isActive = (*i)->update();
//if (!isActive)
// items.remove(*i);
//else
other_code_involving(*i);
}
items.remove_if(CheckItemNotActive);
更新後すぐに非アクティブなアイテムを削除して、リストを再び歩くのを避けたいのです。 しかし、コメントアウトされた行を追加すると、次の行でエラーになります。
i++
: "List iterator not incrementable"。 for文の中でインクリメントしない代替手段をいくつか試しましたが、うまくいきませんでした。
std::listを歩きながらアイテムを削除する最良の方法は何ですか?
どのように解決するのですか?
まずイテレータを(i++で)インクリメントし、それから前の要素を(i++の戻り値を使うなどして)削除する必要があります。 このように、コードをwhileループに変更することができます。
std::list<item*>::iterator i = items.begin();
while (i != items.end())
{
bool isActive = (*i)->update();
if (!isActive)
{
items.erase(i++); // alternatively, i = items.erase(i);
}
else
{
other_code_involving(*i);
++i;
}
}
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] LINQを使用してList<T>から要素を削除する
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] リストから最初の項目を削除するには?
-
[解決済み] リストの順番を維持したまま、重複を削除するにはどうしたらいいですか?
-
[解決済み] 文字列の一覧から空の文字列を削除する
-
[解決済み] 一般的なリストを繰り返しながら、そのリストから要素を削除するには?
-
[解決済み] イテレート中にstd::setから要素を削除する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件