国产chinesehdxxxx老太婆,办公室玩弄爆乳女秘hd,扒开腿狂躁女人爽出白浆 ,丁香婷婷激情俺也去俺来也,ww国产内射精品后入国产

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

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

冬至子 ? 來(lái)源:iDoitnow ? 作者:艱默 ? 2023-07-18 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么引入Lambda

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

基本的Lambda語(yǔ)法

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

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


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

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

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

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

下面我們通過(guò)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)庫(kù)遇到Lambda的時(shí)候,會(huì)碰出什么樣的火花呢?毋庸置疑,這極大的提高我們的編程效率,更提高了代碼的整潔性和可讀性,例如:

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 引入,使我們?cè)谀承┣闆r下,能夠?qū)㈩?lèi)似于函數(shù)的表達(dá)式用作接受函數(shù)指針或函數(shù)符的函數(shù)的參數(shù)。它更像膠水代碼,允許我們將簡(jiǎn)單的處理邏輯傳遞到需要的位置,提高開(kāi)發(fā)效率,使得代碼結(jié)構(gòu)簡(jiǎn)潔而且易于理解。

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

    關(guān)注

    0

    文章

    147

    瀏覽量

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

    關(guān)注

    0

    文章

    6

    瀏覽量

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

    關(guān)注

    0

    文章

    78

    瀏覽量

    3744
  • Lambda
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10225
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    lambda 表達(dá)式就是一個(gè)函數(shù)(匿名函數(shù)),也就是一個(gè)沒(méi)有函數(shù)名的函數(shù)。為什么不需要函數(shù)名呢,因?yàn)槲覀冎苯樱ㄒ淮涡缘模┯盟?,嵌入式用的它,不需要其他地方調(diào)用它。
    發(fā)表于 10-27 10:13 ?1316次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Lambda表達(dá)式詳解

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

    C語(yǔ)言的表達(dá)式

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

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

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

    Python中的Lambda表達(dá)式

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

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

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

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

    Java8 的一個(gè)大亮點(diǎn)是引入 Lambda 表達(dá)式,使用它設(shè)計(jì)的代碼會(huì)更加簡(jiǎn)潔。當(dāng)開(kāi)發(fā)者在編寫(xiě) Lambda 表達(dá)式時(shí),也會(huì)隨之被編譯成一
    發(fā)表于 08-24 10:25 ?442次閱讀