ベクトルの存在のための消去削除イディオムの力の利用
ペア要素のベクトルからペアを削除しようとすると、消去- Remove_if イディオムは多用途ツールとして登場します。ただし、望ましい結果を確実に得るには、適切な実装が重要です。この質問では、意図した機能を実現するために、提供されたコードへの変更を検討します。
元のコードは、erase-remove_if を使用して、ベクトルから .first が 4 に設定されたペアを削除しようとしました。ただし、erase() メソッドの消去範囲の指定が間違っていたため、コードはこれを達成できませんでした。
回答に記載されている正しい構文は次のとおりです。
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
この変更により、ラムダ関数で定義された述語に一致する要素のセグメント全体が含まれるように消去範囲が拡張されます。これにより、一致するすべての要素が効果的に削除され、次の修正された出力で示されるように、目的のベクトル構成が保持されます。
- 2, Up - 6, Up
消去-削除イディオムは、remove_if 関数と Erase 関数の相互作用に依存しています。 Remove_if は、一致しない要素を識別してベクトルの先頭に向かってシフトします。一方、Erase は、remove_if によって返された反復子から始まる一致する要素の範囲を削除します。このメカニズムを理解することが、このイディオムを効果的に使用するための鍵となります。
以上がこのベクトルで .first が 4 に設定されているペアを消去削除イディオムで削除できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。