日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是lamda表达式?

發布時間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是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表达式?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。