(C++11)Lambda表達式(匿名函數)和爲什麼使用Lanbda表達式

Lambda表達式(匿名函數)和爲什麼使用Lanbda表達式

1.什麼是Lambda表達式

名稱Lanbda來自landba caculus(λ演算)--一種定義和應用函數的數學系統。這個系統能讓您使用匿名函數--即無需給函數命名。在C++11中,對於接受函數指針或函數符的的函數,可使用匿名函數定義(lambda)作爲其參數。與前述函數f3對應的lambda如下:

bool f3(int x){return x%3==0;}(計算是否被3整除)

對應lambda表達式:

[](int x){return x%3==0;}

差別有兩個:使用[]替代了函數名(這就是匿名函數的由來);沒有聲明返回類型。返回類型相當於使用decltyp根據返回值推斷得到,這裏爲bool.如果lambda不包含返回語句,推斷出返回類型將爲void.就這個示例而言,你講以如下方式使用該lambda:

std::vector<int> numbers(1000);

count3=std::count_if(numbers.begin(),numbers.end(),[](int x ){return x% 3==0;})

(count_if()的前兩個參數對應指定區間,二第三個參數影視一個返回true或false的函數對象。函數count_if()返回爲true的次數)

也就是說,使用整個lambda表達式替換函數指針或函數符構造函數。

僅當lambda表達式完全由一條返回語句組成時,自動類型腿短才管用:否則,需要使用新增的返回類型後置語法:

[](double x)->double(int y=x;return x-y;)//返回類型爲double

2.爲什麼使用Lanbda表達式


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章