- 語法
[ capture list ] ( parameter list) -> return type { function body; };
[捕獲列表]( 參數(shù)列表 ) -> 返回值類型{函數(shù)體}
- 參數(shù)列表和返回類型可以為空歧焦,但是捕獲列表和函數(shù)體不能為空
auto f = []{return 42};
auto f = [](int a) -> int { return a + 1; }; std::cout << f(1) << std::endl; // 輸出: 2
- 捕獲列表
- [] 不捕獲任何變量衅枫。
- [&] 捕獲外部作用域中所有變量只厘,并作為引用在函數(shù)體中使用(按引用捕獲)妹蔽。
- [=] 捕獲外部作用域中所有變量埃元,并作為副本在函數(shù)體中使用(按值捕獲)晕粪。
- [=,&foo] 按值捕獲外部作用域中所有變量泣刹,并按引用捕獲 foo 變量。
- [bar] 按值捕獲 bar 變量犀被,同時(shí)不捕獲其他變量椅您。
- [this] 捕獲當(dāng)前類中的 this 指針,讓 lambda 表達(dá)式擁有和當(dāng)前類成員函數(shù)同樣的訪問權(quán)限寡键。如果已經(jīng)使用了 & 或者 =掀泳,就默認(rèn)添加此選項(xiàng)。捕獲 this 的目的是可以在 lamda 中使用當(dāng)前類的成員函數(shù)和成員變量西轩。
- 在 sort中的用法员舵,在leetcode題解中看到的,使用lambda 表達(dá)式自定義排序規(guī)則。
sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) {
return u[0] < v[0] || (u[0] == v[0] && u[1] > v[1]);
});
有關(guān)知識(shí)點(diǎn)可看https://blog.csdn.net/u013390476/article/details/50424995
- 默認(rèn)狀態(tài)下藕畔,sort只有兩個(gè)參數(shù)马僻,默認(rèn)按照vector中的對象operator< 即從小到大排列。
- 第三個(gè)參數(shù)可以是一個(gè)謂詞注服,自定義排序規(guī)則韭邓。
- 謂詞可以是一個(gè)函數(shù)指針措近,此函數(shù)有兩個(gè)參數(shù),返回bool值女淑,即比較兩個(gè)對象瞭郑,想要的順序就返回ture。
- 謂詞還可以是lambda鸭你,來自定義排序規(guī)則屈张。