ホームページ >バックエンド開発 >C++ >このベクトルで .first が 4 に設定されているペアを消去削除イディオムで削除できないのはなぜですか?

このベクトルで .first が 4 に設定されているペアを消去削除イディオムで削除できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-10 11:08:02651ブラウズ

Why Does the Erase-Remove Idiom Fail to Eliminate Pairs with .first Set to 4 in this Vector?

ベクトルの存在のための消去削除イディオムの力の利用

ペア要素のベクトルからペアを削除しようとすると、消去- 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。