ループ内のベクトルからの要素の削除
ループの反復中にベクトルから要素を効果的に削除する方法を知ることが重要です。次のコードを使用してこれを実行しようとすると、エラーが発生する可能性があります:
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) { if(it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
エラー メッセージ「operator '=' function is unavailable in 'Player'」は、ベクター内のオブジェクトを使用できないことを示しています。直接再割り当てされます。これを解決するには、Player クラスは代入演算子 (=) を実装する必要があります。
さらに、これはすでに内部で処理されているため、反復子の明示的なインクリメントを避けるために for ループを変更する必要があります。
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); ) { if(it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
生のループを使用する代わりに、消去-削除イディオムを利用してより効果的な処理を行うことをお勧めします。効率:
allPlayers.erase( std::remove_if( allPlayers.begin(), allPlayers.end(), [](Player const & p) { return p.getpMoney() <= 0; } ), allPlayers.end() );
このイディオムは、remove_if アルゴリズムを使用して、指定された条件を満たす要素 (この場合は資金がゼロまたはマイナスのプレイヤー) をフィルターで除外し、その後、erase 関数を使用してそれらをベクトルから削除します。 .
以上がC でループ反復中にベクトルから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。