C++总结笔记(十一)—— Lambda表达式的应用
文章目錄
- 一、Lambda表達(dá)式是什么?
- 二、程序示例
- 1. 在STL中的使用
一、Lambda表達(dá)式是什么?
Lambda表達(dá)式時(shí)C++11引入的語(yǔ)法,本質(zhì)上是一個(gè)匿名函數(shù),用[ ] () {}三個(gè)符號(hào)組成表達(dá)式。
格式為:[capture list] (params list) mutable exception-> return type { function body }
其中:
1:capture list為捕獲外部變量列表。
2:params list表示形參列表。
3:mutable 表示是否修改捕獲的變量,可選擇加還是不加。
4:exception表示異常設(shè)定,一般不使用。
5:return type表示返回值類型。
6:function body 運(yùn)行的函數(shù)。
該表達(dá)式在運(yùn)行過程中由[capture list]先進(jìn)行外部變量的捕獲,捕獲方法包括值傳遞捕獲,地址傳遞捕獲,表達(dá)式自行推導(dǎo)捕獲。
值傳遞捕獲:
int a = 10;[a](){return a/2; };cout << "a=" << a << endl; a=10發(fā)現(xiàn)無論怎么處理變量和函數(shù),都無法更改a的值。
但是我們給lambda表達(dá)式賦一個(gè)auto類型的變量,然后可以用函數(shù)調(diào)用的方式去調(diào)用這個(gè)auto變量,返回值類型為int,就可以實(shí)現(xiàn)c=a/10的功能。
所以由此可以看出,lambda表達(dá)式本質(zhì)上就是一個(gè)函數(shù),如果形參列表()為空,就表明為無參函數(shù)。對(duì)無參的lambda表達(dá)式表達(dá)式來講。
地址傳遞捕獲
int a = 10;int b = 10;//a以值捕獲,b以地址捕獲auto c = [a,&b]()->int{b = a+b; return b; };int d = c();cout << "d=" << d << endl; d=20自行推導(dǎo)捕獲
[=] 表示用值傳遞的方式捕獲所有變量。
[this] 捕獲所在類內(nèi)的this指針。
二、程序示例
1. 在STL中的使用
//以引用和值傳遞的方式給容器賦值,算法采用generategenerate(v.begin(), v.end(), [i, &j]() {j= i + j;return j;});//以地址傳遞的方式遍歷容器的值,同時(shí)按照x = x * i+ j的公式更改容器的值。for_each(v.begin(), v.end(), [=](int &x) {x = x * i+ j;cout << "x=" << x << endl;});//實(shí)現(xiàn)降序排列sort(v.begin(), v.end(), [](const int& a,const int& b){return a>b;}); 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C++总结笔记(十一)—— Lambda表达式的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [NLP-CNN] Convolutio
- 下一篇: C++STL总结笔记(一)—— 容器和容