什么是lamda表达式?
我們首先來看一下這一片代碼:
1 class Solution { 2 public: 3 int singleNumber(int A[], int n) { 4 // Note: The Solution object is instantiated only once and is reused by each test case. 5 int retval = 0; 6 for_each(A, A+n, [&retval](int val){retval ^= val;}); 7 return retval; 8 } 9 };看一下第六行的代碼,for_each是C++用來處理container的一個很好用的東西(雖然只是經常用來print一下),第三個參數是個函數,對于前面的參數進行處理的函數。具體可以參考這里。
http://www.cplusplus.com/reference/algorithm/for_each/
?
第三個參數就是鼎鼎大名的lamda表達式了。樓主也是剛知道這是C++11的新特性,對于用著十年前教材的大學來說是肯定不會教的啦==
簡單來說,lamda表達式就是一個匿名函數。
?
基本語法結構是[](){};
其中[]是變量捕獲列表,用來聲明需要捕獲的外部變量;
()是參數列表部分;
{}是函數體部分。
看個例子:
?
[](int a, int b){ return a + b; };?
C++ Lamda表達式的參數列表中參數需要聲明類型;函數體不能省略{}符號和return關鍵字;即使單條語句時也不能省略。
顯式聲明需要捕獲的外部變量,舉個栗子:
1 void HostingFunction() 2 { 3 int c = 1; 4 auto f = [c](int a, int b){ return a + b + c; }; 5 }代碼中聲明了需要捕獲外部變量c,則函數體中即可引用變量c,否則不能引用。不同于C# Lamda表達式,上述例子中對變量c的改變并不能影響f的行為,因為捕獲的c是以值類型捕獲的,也即是一份拷貝。如果對變量c采取按引用的方式捕獲,則變量c的改變會影響f的行為。如下:
1 void HostingFunction() 2 { 3 int c = 1; 4 auto f = [&c](int a, int b){ return a + b + c; }; 5 }這個時候,我們就可以看懂文章最開始的代碼了~
1 int retval = 0; 2 for_each(A, A+n, [&retval](int val){retval ^= val;});表示retval對于每個val進行異或操作。最后的結果保存在retval中。
這個題目是:https://leetcode.com/problems/single-number/
具體為什么要異或呢,大家想一想吧~~~
轉載于:https://www.cnblogs.com/shenbingyu/p/4643822.html
總結
以上是生活随笔為你收集整理的什么是lamda表达式?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 4391 Paint The W
- 下一篇: PHP的MVC模型