一般的函式形式以及呼叫形式
int
foo(
int a,
int b)
foo(1,
2)
首先是匿名函式形式
//捕獲列表 預設是按值捕獲
()//引數列表
->int //函式返回值
int c2 =
(int a,
int b)
->
int(1,
2);//為了能夠復用lamba表示式
auto f=
(int a,
int b)
->
int;
int c3 =f(
1,2)
;
巢狀的lamba表示式 (函式式程式設計)
int c4=
(int n)(2
);}(1);
為了能夠復用巢狀的lamba表示式
上面的式子等價於
auto f2=
(int n);}
;int c5 =f2(
1)(2
);
這裡有乙個常考點,捕獲列表,預設是按值捕獲,(內部修改不會影響外部)
mutable是為了匿名函式t能夠++t,不然報錯t是右值,不能修改。
int t =10;
auto f3 =
[t](
)mutable
->
int;
auto f4 =
[t](
)mutable
->
int;
//我們發現其實每個同個匿名內部都是按 值 捕獲 ,不會改變外部的值,但是每次呼叫f3 f3內部會維持同乙個位址 f4內部也會維持乙個位址 f3,f4變數互不影響。
cout <
)<< endl;
cout <
)<< endl;
cout <
)<< endl;
cout <
)<< endl;
cout << t << endl;
上面充分說明了匿名內部是按 值 捕獲,我們看看執行結果
我們發現其實每個同個匿名內部都是按 值 捕獲 ,不會改變外部的值, f3內部會維持乙個位址 f4內部也會維持乙個位址 f3,f4變數互不影響。也就是外部t,f3中的t,f4中的t有各自的乙個t位址
其實我們可以看看,t在外部位址,內部f3地質 ,內部f4位址
![在這裡插入描述](
mfuz3pozw5na**pdgk,shadow_10,text_ahr0chm6ly9ibg9nlmnzzg4ubmv0l3fxxzizotiznzez,size_16,color_ffffff,t_70)
當然我們也可以按引用捕獲
//更一般的
t =100;
//按值捕獲
auto f5 =
[t]()-
>
int;
auto f6 =
[&t]()
->
int;
cout <
)<< endl;
//外部的t是沒有改變的
//捕獲列表
int m =1;
int n =2;
//外面的引數都是按值捕獲[=
]();
//外面的引數都是按引用捕獲[&
]();
hadoop 細節考察點
1.在hadoop 上執行乙個job,主要就是mr,而mr的優化就是主要的關鍵。從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數 inputformat combinetextinputformat作為輸入,解決大量小檔案場景.map階段 調整 io.s...
C 匿名函式
所謂匿名函式,其實類似於python中的lambda函式,其實就是沒有名字的函式。使用匿名函式,可以免去函式的宣告和定義。這樣匿名函式僅在呼叫函式的時候才會建立函式物件,而呼叫結束後立即釋放,所以匿名函式比非匿名函式更節省空間 c 中的匿名函式通常為 capture parameters retur...
C 匿名函式
匿名函式是乙個 內聯 語句或表示式,可在需要委託型別的任何地方使用。可以使用匿名函式來初始化命名委託,或傳遞命名委託 而不是命名委託型別 作為方法引數。c 中委託的發展 在 c 1.0 中,您通過使用在 中其他位置定義的方法顯式初始化委託來建立委託的例項。c 2.0 引入了匿名方法的概念,作為一種編...