STL 関数オブジェクトは、C 11 の完全転送と移動セマンティクス、C 14 の関数ポインターのカプセル化と汎用ラムダなど、大幅な改善を受けています。これらの改善により、使いやすさ、効率性、柔軟性が向上します。たとえば、汎用ラムダでは、std::less{} を使用して降順に並べ替えるだけで、並べ替え関数オブジェクトの作成が簡素化されます。
C 11 および C 14 の STL 関数オブジェクトの改善
C 標準ライブラリ (STL) の開発中に、関数オブジェクトが大幅に改善されました。これらの改善は、使いやすさ、効率性、柔軟性を向上させるように設計されています。
C 11 の改善点
コード例:
struct Forwarder { template <typename ...Args> void operator()(Args&&... args) const { std::forward<Args>(args)...; // 完美转发参数 } };
コード例:
struct Mover { std::string value; Mover(Mover&& other) noexcept : value(std::move(other.value)) { other.value.clear(); // 移出旧值 } };
C 14 の改善
コード例:
auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
コード例:
auto sort_by = [](const auto& a, const auto& b) { return a < b; };
実際的なケース
生徒の成績のデータ構造があると仮定します。 STL関数オブジェクトを使用して成績をソートします。
C 11 コード:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::sort(grades.begin(), grades.end(), [](int a, int b) { return a > b; }); // 降序排序
C 14 コード:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::ranges::sort(grades, std::less{}); // 降序排序
ご覧のとおり、C 14 の導入汎用ラムダを使用すると、ソート関数オブジェクトの作成が簡素化されます。
以上がC++ 11 および C++ 14 の STL 関数オブジェクトの改良点?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。