首頁  >  文章  >  後端開發  >  STL 函數物件與 C++ lambda 表達式的差異是什麼?

STL 函數物件與 C++ lambda 表達式的差異是什麼?

PHPz
PHPz原創
2024-04-25 12:18:01531瀏覽

函數物件和 lambda 表達式都是建立匿名函數的工具。主要差異在於:語法:函數物件使用類別定義,而 lambda 表達式使用 [] 語法。作用域:函數物件可以在類別外使用,而 lambda 表達式僅限於定義範圍。捕捉:函數物件不能捕捉外部變量,而 lambda 表達式可以透過捕捉列表捕捉。開銷:函數物件建立開銷低,lambda 表達式開銷高。可重用性:函數物件通常可重複使用,lambda 表達式通常是一次性使用的。

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

STL 函數物件與C lambda 表達式的區別

函數物件和lambda 表達式都是C 中用來創建匿名函數的工具。雖然它們有相似之處,但也有關鍵的區別:

語法

  • #函數物件:使用類別來宣告。
  • lambda 表達式:使用 [] 語法定義。

作用域

  • 函數物件:可以在類別之外使用。
  • lambda 表達式:僅在定義它們的範圍內有效。

捕捉到

  • 函數物件:不能捕捉外部變數。
  • lambda 表達式:可以透過擷取清單捕捉外部變數。

開銷

  • 函數物件:建立開銷低。
  • lambda 表達式:建立開銷高,因為它需要產生一個閉包。

可重用性

  • 函數物件:通常是可重複使用的。
  • lambda 表達式:通常是一次性使用的。

實戰案例

假設我們有一個整數數組,我們想找出第一個符合特定條件的元素(例如,第一個大於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;
}

使用lambda 表達式:

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;
}

在這個範例中,lambda 表達式用於建立匿名函數,函數判斷整數是否大於10。

以上是STL 函數物件與 C++ lambda 表達式的差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn