ループ内のベクトル要素の消去
C では、反復子が無効になる可能性があるため、反復中にベクトルを操作するのは難しい場合があります。この記事では、ループ内の条件に基づいてベクトルから要素を安全に削除する問題について説明します。
初期コードとエラー メッセージ
元の質問で示されたコードベクトルを反復処理しながら、ベクトルから要素を削除しようとします。ただし、「'operator =' function is unavailable in 'Player'」というエラー メッセージが表示されます。
エラーの理由
このエラーは、erase( ) メソッドは内部で代入演算子 (=) を利用して、ベクトル内の要素を移動します。 Player クラスの代入演算子が存在しないため、erase() を正常に実行できません。
解決策
この問題を解決するには、まずコードで代入を実装する必要があります。 Player クラスの演算子。さらに、反復子 (it ) は反復ごとに自動的に更新されるため、ループ内で反復子 (it ) をインクリメントすることは避けるべきです。
代替アプローチ: Erase-Remove Idiom
Erase-Remove Idiom は、この問題に対するより洗練された効率的なソリューションを提供します。 std::remove_if() 関数を利用して、指定された条件を満たす要素を識別して削除します。以下のコードは、このアプローチを示しています。
allPlayers.erase( std::remove_if( allPlayers.begin(), allPlayers.end(), [](Player const & p) { return p.getpMoney() <= 0; } // Lambda function to identify players with negative money ), allPlayers.end() );
結論
無効な反復子の可能性に対処し、必要に応じて代入演算子を実装し、効率的なアルゴリズムを利用することで、開発者はC のループ内のベクトルから要素を安全に削除できます。
以上がループ内で C ベクトルから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。