色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么引入Lambda?C++11 Lambda表達(dá)式介紹

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 16:26 ? 次閱讀

為什么引入Lambda

Lambda表達(dá)式是一個(gè)可以內(nèi)聯(lián)在我們代碼中的函數(shù),我們可以將他傳遞給另外一個(gè)函數(shù)。在沒有引入Lambda表達(dá)式之前,當(dāng)我們遇到需要對多個(gè)數(shù)據(jù),按照同一規(guī)則進(jìn)行操作的時(shí)候,創(chuàng)建機(jī)動函數(shù)會更簡單,但是必須在其他地方定義好該函數(shù),然后再使用它,有時(shí)候兩者之間可能距離離的很遠(yuǎn),想要了解該函數(shù)內(nèi)部操作的原理,需要翻閱多頁源代碼找它的定義,這樣使得代碼的可讀性大打折扣。這就是Lambda表達(dá)式出現(xiàn)的主要原因。

基本的Lambda語法

lambda表達(dá)式是一個(gè)匿名函數(shù)。其可以捕獲作用域中的變量。其在C++11中常用的語法如下:

[captures](params){body}
[captures]{body}  //省略了形參列表,函數(shù)不接收實(shí)參,如同形參列表為()
[captures](params)- >return-type{body}  //return-type為返回類型


//eg:
//捕獲列表     參數(shù)列表           函數(shù)體
    []   (int a, int b)  { return a < b;}
//捕獲列表     參數(shù)列表      返回類型          函數(shù)體
    []   (double x)  - > double   {int y = x; return x - y;}
/*注:Lambda函數(shù)沒有聲明返回類型,其返回類型相當(dāng)于使用decltyp根據(jù)返回值推斷得到的。
     如果函數(shù)體內(nèi)不包含返回語句,則推斷出返回類型為void。
     但是僅當(dāng)函數(shù)體完全由一條返回語句組成時(shí),自動類型推斷才管用
     否則,需要使用新增的返回類型后置語法*/

:Lambda表達(dá)式自動推斷返回值類型:有些編譯器,像GCC,即使你有多于一個(gè)返回語句也不可以自動推斷成功,但標(biāo)準(zhǔn)不保證這一點(diǎn),因此為了防止意外的發(fā)生,當(dāng)函數(shù)體內(nèi)返回語句不止一條的時(shí)候,建議使用返回類型后置語法】

其中captures為捕獲,它一個(gè)包含0個(gè)或者多個(gè)捕獲符的用逗號分隔的列表。params為參數(shù)列表,body為函數(shù)體。默認(rèn)的捕獲符只有:

  • &:采用引用隱式捕獲的方式使用自動變量
  • =:采用復(fù)制隱式捕獲的方式使用自動變量
    []        // 默認(rèn)不捕獲
    [&]       // 默認(rèn)以引用捕獲(意味著在函數(shù)體內(nèi)可以按照引用的方式使用Lambda表達(dá)式所在范圍內(nèi)所有可見的局部變量)
    [&, i]    // 以引用捕獲(同上),但i以值捕獲
    [=]       // 默認(rèn)以復(fù)制捕獲(意味著在函數(shù)體內(nèi)可以按照值傳遞的方式使用Lambda表達(dá)式所在范圍內(nèi)所有可見的局部變量)
    [=, &i]   // 以復(fù)制捕獲(同上),但 i 以引用捕獲
    

下面我們通過C++ Primer Plus中的一個(gè)例子進(jìn)一步理解Lambda表達(dá)式:

#include < iostream >
#include < vector >
#include < algorithm >
#include < cmath >
#include < ctime >
const long Size = 390000L;
int main()
{
  using std::cout;
  std::vector< int > numbers(Size);
  std::srand(std::time(0));
  std::generate(numbers.begin(), numbers.end(), std::rand);
  cout < < "Sample size = " < < Size < < 'n';
  // using lambdas
  int count3 = std::count_if(numbers.begin(), numbers.end(),
                             [](int x){return x % 3 == 0;});
  cout < < "Count of numbers divisible by 3: " < < count3 < < 'n';
  int count13 = 0;
  std::for_each(numbers.begin(), numbers.end(),
                [&count13](int x){count13 += x % 13 == 0;});
  cout < < "Count of numbers divisible by 13: " < < count13 < < 'n';
  // using a single lambda
  count3 = count13 = 0;
  std::for_each(numbers.begin(), numbers.end(),
                [&](int x){count3 += x % 3 == 0; count13 += x % 13 == 0;});
  cout < < "Count of numbers divisible by 3: " < < count3 < < 'n';
  cout < < "Count of numbers divisible by 13: " < < count13 < < 'n';
  return 0;
}

程序輸出結(jié)果:

Sample size = 390000
Count of numbers divisible by 3: 130274
Count of numbers divisible by 13: 30009
Count of numbers divisible by 3: 130274
Count of numbers divisible by 13: 30009

Lambda與STL的結(jié)合

當(dāng)STL中的算法(algorithms)庫遇到Lambda的時(shí)候,會碰出什么樣的火花呢?毋庸置疑,這極大的提高我們的編程效率,更提高了代碼的整潔性和可讀性,例如:

vector< int > v;
v.push_back(1);
v.push_back(2);
//不使用Lambda表達(dá)式
for ( auto itr = v.begin(); itr != v.end(); itr++ )
{
    cout < < *itr;
}

//使用Lambda表達(dá)式
for_each( v.begin(), v.end(), [] (int val){cout < < val;} );

正如上面的例子,使用Lambda表達(dá)式后,代碼顯的更漂亮,而且它的可讀性也很強(qiáng),結(jié)構(gòu)更緊湊。

總結(jié)

Lambda 引入,使我們在某些情況下,能夠?qū)㈩愃朴诤瘮?shù)的表達(dá)式用作接受函數(shù)指針或函數(shù)符的函數(shù)的參數(shù)。它更像膠水代碼,允許我們將簡單的處理邏輯傳遞到需要的位置,提高開發(fā)效率,使得代碼結(jié)構(gòu)簡潔而且易于理解。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C++語言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    7214
  • STL算法
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    5447
  • gcc編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    3632
  • Lambda
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10086
收藏 0人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++的lambda表達(dá)式詳解

    lambda 表達(dá)式就是一個(gè)函數(shù)(匿名函數(shù)),也就是一個(gè)沒有函數(shù)名的函數(shù)。為什么不需要函數(shù)名呢,因?yàn)槲覀冎苯樱ㄒ淮涡缘模┯盟度胧接玫乃恍枰渌胤秸{(diào)用它。
    發(fā)表于 10-27 10:13 ?1230次閱讀

    Linux內(nèi)核中C語法擴(kuò)展-語句表達(dá)式

    表達(dá)式和語句是 C 語言中的基礎(chǔ)概念。什么是表達(dá)式呢?表達(dá)式就是由一系列操作符和操作數(shù)構(gòu)成的式子。操作符可以是 C 語言標(biāo)準(zhǔn)規(guī)定的各種算術(shù)運(yùn)
    的頭像 發(fā)表于 02-17 09:30 ?2883次閱讀

    Java Lambda表達(dá)式的新特性

    Java Lambda表達(dá)式是Java 8中最重要的新特性之一。 它們是一種可傳遞的匿名函數(shù),可以作為參數(shù)傳遞給方法或存儲在變量中,因此可以在需要的時(shí)候調(diào)用它們。 基礎(chǔ) 1. 簡介 Lambda
    的頭像 發(fā)表于 09-30 10:29 ?2792次閱讀

    哪位大神詳細(xì)介紹委托、匿名方法、Lambda表達(dá)式?

    委托、匿名方法、Lambda表達(dá)式總結(jié)
    發(fā)表于 11-11 07:50

    防范表達(dá)式的失控

    C 語言中,表達(dá)式是最重要的組成部分之一,幾乎所有的代碼都由表達(dá)式構(gòu)成。表達(dá)式的使用如此廣泛,讀者也許會產(chǎn)生這樣的疑問,像+ 、- 、3 、/ 、& & 這樣簡單的運(yùn)算也會出現(xiàn)
    發(fā)表于 04-22 16:57 ?13次下載

    C語言指針的表達(dá)式實(shí)例程序說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言指針的表達(dá)式實(shí)例程序說明。
    發(fā)表于 11-05 17:07 ?4次下載
    <b class='flag-5'>C</b>語言指針的<b class='flag-5'>表達(dá)式</b>實(shí)例程序說明

    Python正則表達(dá)式的學(xué)習(xí)指南

    本文介紹了Python對于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫
    發(fā)表于 09-15 08:00 ?0次下載
    Python正則<b class='flag-5'>表達(dá)式</b>的學(xué)習(xí)指南

    Python正則表達(dá)式指南

    本文介紹了Python對于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫
    發(fā)表于 03-26 09:13 ?10次下載
    Python正則<b class='flag-5'>表達(dá)式</b>指南

    C語言如何使用正則表達(dá)式

    C語言的正則表達(dá)式規(guī)則,特此跟大家分享。
    的頭像 發(fā)表于 03-16 08:41 ?5246次閱讀

    Lambda表達(dá)式詳解

    C++11中的Lambda表達(dá)式用于 **定義并創(chuàng)建匿名的函數(shù)對象** ,以簡化編程工作。下面看一下Lambda表達(dá)式的基本構(gòu)成。
    的頭像 發(fā)表于 02-09 11:28 ?1518次閱讀

    C語言的表達(dá)式

    C語言中,表達(dá)式是由操作符和操作數(shù)組成。表達(dá)式可以由一個(gè)或者多個(gè)操作數(shù)組成,不同的操作符與操作數(shù)組成不同的表達(dá)式,因此,表達(dá)式才是
    的頭像 發(fā)表于 02-21 15:09 ?1745次閱讀
    <b class='flag-5'>C</b>語言的<b class='flag-5'>表達(dá)式</b>

    C++入門之表達(dá)式

    表達(dá)式是由一個(gè)或多個(gè)操作符組成的并且返回一個(gè)結(jié)果。一個(gè)最簡單的表達(dá)式就是一個(gè)變量或者字面量,更加復(fù)雜的表達(dá)式是由一個(gè)操作符和一個(gè)或多個(gè)操作數(shù)組成。
    的頭像 發(fā)表于 03-17 13:55 ?1022次閱讀

    Python中的Lambda表達(dá)式

    在 Python 中,Lambda 表達(dá)式是一種非常強(qiáng)大的工具,它可以讓你快速創(chuàng)建小型匿名函數(shù),而不需要顯式地定義函數(shù)名稱。Lambda 表達(dá)式通常用于傳遞函數(shù)對象或簡單的函數(shù)式編程。
    的頭像 發(fā)表于 04-19 15:49 ?1003次閱讀

    網(wǎng)絡(luò)工程師學(xué)Python-Lambda表達(dá)式

    在 Python 中,Lambda 表達(dá)式是一種非常強(qiáng)大的工具,它可以讓你快速創(chuàng)建小型匿名函數(shù),而不需要顯式地定義函數(shù)名稱。Lambda 表達(dá)式通常用于傳遞函數(shù)對象或簡單的函數(shù)式編程。
    的頭像 發(fā)表于 04-19 15:51 ?1042次閱讀

    如何使用lambda表達(dá)式提升開發(fā)效率?

    Java8 的一個(gè)大亮點(diǎn)是引入 Lambda 表達(dá)式,使用它設(shè)計(jì)的代碼會更加簡潔。當(dāng)開發(fā)者在編寫 Lambda 表達(dá)式時(shí),也會隨之被編譯成一
    發(fā)表于 08-24 10:25 ?398次閱讀
    主站蜘蛛池模板: 一本大道无码AV天堂欧美 | 小骚妇BBBXXX | 色播成人影院 | 亚洲精品久久久久久久蜜臀老牛 | 亚洲精品97福利在线 | 扒开女生尿口 | 欧美 亚洲 日韩 在线综合 | 日韩精品AV一区二区三区 | 精品无码人妻一区二区免费AV | 好爽好深太大了再快一点 | 国产成人免费在线 | 成人免费在线 | 欧美亚洲日韩一道免费观看 | 特级aa 毛片免费观看 | 久久水蜜桃亚洲AV无码精品偷窥 | 久久国产成人午夜AV影院无码 | 毛片亚洲毛片亚洲毛片 | 99精品在线播放 | 亚洲精品国产高清嫩草影院 | 一级毛片视频免费 | 国产亚洲精品字幕在线观看 | 少女10声大哥喊退色狼 | 天天日免费观看视频一1 | 国产一在线精品一区在线观看 | 日本一本免费线观看视频 | 亚洲综合久久一本伊伊区 | 色翁荡息又大又硬又粗又爽电影 | 囯产精品一区二区三区线 | 无人区大片中文字幕在线 | 99er热精品视频国产免费 | 免费乱理伦片在线观看夜 | 国产亚洲精品影视在线 | 暖暖日本手机免费完整版在线观看 | 亚洲第一页在线播放 | 和美女啪啪啪动态图 | 麻婆豆腐传媒视频免费 | 偷拍精品视频一区二区三区 | 亚洲精品国产自在现线最新 | 狼人大香伊蕉国产WWW亚洲 | 国产毛A片啊久久久久久A | 欧美三级不卡在线观线看 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品