函數物件和 lambda 表達式都是建立匿名函數的工具。主要差異在於:語法:函數物件使用類別定義,而 lambda 表達式使用 [] 語法。作用域:函數物件可以在類別外使用,而 lambda 表達式僅限於定義範圍。捕捉:函數物件不能捕捉外部變量,而 lambda 表達式可以透過捕捉列表捕捉。開銷:函數物件建立開銷低,lambda 表達式開銷高。可重用性:函數物件通常可重複使用,lambda 表達式通常是一次性使用的。
STL 函數物件與C lambda 表達式的區別
函數物件和lambda 表達式都是C 中用來創建匿名函數的工具。雖然它們有相似之處,但也有關鍵的區別:
語法
[]
語法定義。 作用域
捕捉到
開銷
可重用性
實戰案例
假設我們有一個整數數組,我們想找出第一個符合特定條件的元素(例如,第一個大於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中文網其他相關文章!