ループ内のベクトルの要素を削除する
質問
私はこの質問と同様の質問があることを知っているが、私はそれらの援助によって私のコード上の方法を見つけることができなかった。私は単にループの中でこの要素の属性をチェックすることによって、ベクトルの要素を削除/削除したい。どうすればいいのでしょうか?以下のコードを試してみましたが、曖昧なエラーメッセージが表示されました。
operator =' 関数は 'Player' で使用できません。
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++)
{
if(it->getpMoney()<=0)
it = allPlayers.erase(it);
else
++it;
}
どうすればいいのでしょうか?
更新してください。 という質問はどうでしょうか? vector::erase with pointer メンバ は、同じ問題に関連していますか?私はそれ故に代入演算子が必要なのでしょうか?なぜですか?
どのように解決するには?
をインクリメントしてはいけません。
it
の中で
for
ループの中に
for (vector<Player>::iterator it=allPlayers.begin();
it!=allPlayers.end();
/*it++*/) <----------- I commented it.
{
if(it->getpMoney()<=0)
it = allPlayers.erase(it);
else
++it;
}
コメントされている部分に注目してください。
it++
は必要ありません。
it
は for-body 自体でインクリメントされるからです。
エラーについては、"
'operator =' 関数は 'Player' で使用できません。
というエラーが出ていますが、これは
erase()
の使用法に起因するもので、内部的には
operator=
を使ってベクター内の要素を移動しています。を使用するために
erase()
を使うには、クラスのオブジェクト
Player
は割り当て可能でなければなりません。
operator=
に対して
Player
クラスで使用されます。
とにかく避けるべきは 生ループ 1 はできるだけ避け、代わりにアルゴリズムを使用することをお勧めします。この場合、人気のある イレーズ・リムーブ・イディオム は、あなたがやっていることを単純化することができます。
allPlayers.erase(
std::remove_if(
allPlayers.begin(),
allPlayers.end(),
[](Player const & p) { return p.getpMoney() <= 0; }
),
allPlayers.end()
);
1. の一つです。 ショーン・ペアレンツのベストトーク である。
関連
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] std::vectorをハードコードされた要素で初期化する最も簡単な方法は何ですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] ベクトルから要素を消去する