日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++总结笔记(十一)—— Lambda表达式的应用

發布時間:2023/12/10 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()可以用int類型接收auto b = [a]()->int {return a / 10; }; int c = b();cout << "c=" << c << endl; c=1

地址傳遞捕獲

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表达式的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。