[解決済み] C++11のforループでwhileベクトルから項目を削除する?
2022-09-04 04:49:01
質問
IInventory* のベクトルがあり、C++11 の range for を使ってリスト内をループし、それぞれに対して何かを行っています。
1 つでいくつかのことを行った後、リストからそれを削除し、オブジェクトを削除したいと思うかもしれません。私は
delete
を呼び出すことができるのは知っていますが、ポインタをベクターから削除する適切な方法は何でしょうか。
for
ループの中で、ベクターからそれを削除する適切な方法は何ですか?また、リストからそれを削除した場合、私のループは無効になるのでしょうか?
std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());
for (IInventory* index : inv)
{
// Do some stuff
// OK, I decided I need to remove this object from 'inv'...
}
どのように解決するのですか?
いいえ、できません。範囲指定
for
は、コンテナの各要素に一度だけアクセスする必要があるときのためにあります。
を使用する必要があります。
for
ループを使用する必要があります。
例えば
auto i = std::begin(inv);
while (i != std::end(inv)) {
// Do some stuff
if (blah)
i = inv.erase(i);
else
++i;
}
関連
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] std::vector にある項目が存在するかどうかを調べるには?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] std::mapで範囲指定for()ループを使用するには?
-
[解決済み] C++11逆レンジベースforループ
-
[解決済み] 1行のifやループに中括弧(={})を使用する目的は何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】汝、std::vector を継承してはならない。
最新
-
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++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?