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