我們首先來看一下這一片**:
1class
solution );
7return
retval;8}
9 };
看一下第六行的**,for_each是c++用來處理container的乙個很好用的東西(雖然只是經常用來print一下),第三個引數是個函式,對於前面的引數進行處理的函式。具體可以參考這裡。
第三個引數就是鼎鼎大名的lamda表示式了。樓主也是剛知道這是c++11的新特性,對於用著十年前教材的大學來說是肯定不會教的啦==
簡單來說,lamda表示式就是乙個匿名函式。
基本語法結構是(){};
其中是變數捕獲列表,用來宣告需要捕獲的外部變數;
()是引數列表部分;
{}是函式體部分。
看個例子:
(int a, int b);
c++ lamda表示式的引數列表中引數需要宣告型別;函式體不能省略{}符號和return關鍵字;即使單條語句時也不能省略。
顯式宣告需要捕獲的外部變數,舉個栗子:
1void
hostingfunction()
2;
5 }
**中宣告了需要捕獲外部變數c,則函式體中即可引用變數c,否則不能引用。不同於c# lamda表示式,上述例子中對變數c的改變並不能影響f的行為,因為捕獲的c是以值型別捕獲的,也即是乙份拷貝。如果對變數c採取按引用的方式捕獲,則變數c的改變會影響f的行為。如下:
1void
hostingfunction()
2;
5 }
這個時候,我們就可以看懂文章最開始的**了~
1int retval = 0
;2 for_each(a, a+n, [&retval](int val));
表示retval對於每個val進行異或操作。最後的結果儲存在retval中。
這個題目是:
具體為什麼要異或呢,大家想一想吧~~~
LAMDA表示式學習
1.普通繫結 public void button1 click object sender,eventargs e this.button1.click button1 click 2.匿名委託 this.button1.click delegate object sender,eventargs...
lamda表示式學習
lamda表示式 格式 形參列表 作用 簡化匿名方法的書寫,可用在任何可使用匿名方法和強型別 的地方 例子 using system using system.collections.generic using system.linq using system.text namespace lamd...
python的lamda表示式
學習python時看到了這個函式 對裡面的lamda表示式產生了疑問。經過一番查詢,對lamda表示式理解如下 lamda看似是表示式,其實是乙個函式,冒號前是傳入的引數,冒號後是表示式,return將返回它的值。可以用來代替乙個簡單的函式,減少 篇幅 例1 def sum x,y return x...