lambda表示式是c++11的重要特性之一,有如下特點:
1)宣告式的程式設計風格:就地匿名定義目標函式或者函式,不需要額外寫乙個命名函式或者函式物件,以更直接的方式寫程式。
2) 簡潔:不需要額外再寫乙個函式或者函式物件,避免了**膨脹和功能分散。
3) 在需要的時間和地點實現功能閉包,使程式更加靈活。
lambda表示式以下面的形式定義乙個匿名函式,並且可以通過內的引數來捕獲一定範圍內的變數
[capture] (params) opt -> ret ;
通過方括號內的捕捉列表,可以捕獲一定範圍內的變數:
#include
intmain
(int argc,
char
* argv)
"<< std:
:endl;
auto f =
(int a)
->
int;
std:
:cout <<
"f(1) = "
<
1)<< std:
:endl;
std:
:cout << std:
:endl;
std:
:cout <<
"省略返回值型別,由return語句自動推導:(int a) "
所以,在使用的時候,預設狀態下的lambda表示式無法修改通過複製方式捕獲的外部變數,如果希望修改這些變數,需要用引用的方式進行修改
比如,我要實現乙個降序的比較,可能需要寫乙個cmp類,然後去過載()操作符,讓cmp物件去呼叫它
#include
#include
#include
class cmp };
template
void
print
(const std:
:vector
& vt)
intmain
(int argc,
char
* argv)
; std:
:cout <<
"排序前: \n"
;print
(ivec)
; std:
:sort
(ivec.
begin()
, ivec.
end(),
cmp())
; std:
:cout <<
"排序後: \n"
;print
(ivec)
;return0;
}
用上面的方式,或者是使用自定義函式,會顯得很繁瑣,那麼這個時候,其實就可以用lambda表示式代替它們
#include
#include
#include
template
void
print
(const std:
:vector
& vt)
intmain
(int argc,
char
* argv)
; std:
:cout <<
"排序前: \n"
;print
(ivec)
; std:
:sort
(ivec.
begin()
, ivec.
end(),
(const
int&a,
const
int&b)
->bool);
std:
:cout <<
"排序後: \n"
;print
(ivec)
;return0;
}
lambda表示式 lambda表示式
1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...
C 基礎知識 Lambda表示式
一 lambda表示式簡介 lambda表示式可以理解為匿名函式,可以包含表示式和語句。它提供了一種便利的形式來建立委託。lambda表示式使用這個運算子 它讀成 goes to 該運算子的左邊為輸入引數,右邊是表示式或者語句塊。二 例子 例1 1 using system 2using syste...
Lambda表示式和Lambda表示式樹
原版來自 linq學習筆記之二 lambda表示式和lambda表示式樹 lambda 表示式 lambda expressions 是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式 query expressions 時,查詢表示...