ホームページ >バックエンド開発 >C++ >STL 関数オブジェクトと C++ ラムダ式の違いは何ですか?

STL 関数オブジェクトと C++ ラムダ式の違いは何ですか?

PHPz
PHPzオリジナル
2024-04-25 12:18:01582ブラウズ

関数オブジェクトとラムダ式はどちらも、匿名関数を作成するためのツールです。主な違いは次のとおりです。 構文: 関数オブジェクトはクラス定義を使用しますが、ラムダ式は [] 構文を使用します。スコープ: 関数オブジェクトはクラスの外で使用できますが、ラムダ式は定義のスコープに限定されます。キャプチャ: 関数オブジェクトは外部変数をキャプチャできませんが、ラムダ式はキャプチャ リストを通じてキャプチャできます。オーバーヘッド: 関数オブジェクト作成のオーバーヘッドは低く、ラムダ式のオーバーヘッドは高くなります。再利用性: 関数オブジェクトは通常再利用可能で、ラムダ式は通常 1 回限りの使用です。

STL 函数对象与 C++ lambda 表达式的区别是什么?

STL 関数オブジェクトと C ラムダ式の違い

関数オブジェクトとラムダ式はどちらも C ツールでの作成に使用されます匿名関数の場合。これらには類似点がありますが、重要な違いもあります。

構文

  • 関数オブジェクト: クラスを使用して宣言します。
  • ラムダ式: [] 構文定義を使用します。

スコープ

  • 関数オブジェクト: クラスの外で使用できます。
  • ラムダ式: は、定義されているスコープ内でのみ有効です。

#Capture

  • Function オブジェクト: 外部変数をキャプチャできません。
  • ラムダ式: 外部変数はキャプチャ リストを通じてキャプチャできます。
#オーバーヘッド

    関数オブジェクト:
  • 作成のオーバーヘッドが低い。
  • ラムダ式:
  • クロージャを生成する必要があるため、作成のオーバーヘッドが高くなります。
再利用性

    関数オブジェクト:
  • 通常は再利用可能。
  • ラムダ式:
  • 通常は 1 回限りの使用です。
実際的なケース

整数の配列があり、特定の条件を満たす最初の要素 (たとえば、最初の要素) を見つけたいとします。要素が 10 を超えています)。

関数オブジェクトの使用:

class GreaterThan10 {
public:
    bool operator()(int x) { return x > 10; }
};

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), GreaterThan10());
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

ラムダ式の使用:

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; });
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}
この例では、ラムダ式は次のとおりです。整数が 10 より大きいかどうかを判断する無名関数を作成します。

以上がSTL 関数オブジェクトと C++ ラムダ式の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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