一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C++11 lambda表達(dá)式

 wtkc 2014-10-24

C++11引入了lambda表達(dá)式,使得程序員可以定義匿名函數(shù),該函數(shù)是一次性執(zhí)行的,既方便了編程,又能防止別人的訪問。

Lambda表達(dá)式的語(yǔ)法通過下圖來介紹:

 

         這里假設(shè)我們定義了一個(gè)如上圖的lambda表達(dá)式。現(xiàn)在來介紹途中標(biāo)有編號(hào)的各個(gè)部分是什么意思。

  1. Lambda表達(dá)式的引入標(biāo)志,在‘[]’里面可以填入‘=’或‘&’表示該lambda表達(dá)式“捕獲”(lambda表達(dá)式在一定的scope可以訪問的數(shù)據(jù))的數(shù)據(jù)時(shí)以什么方式捕獲的,‘&’表示一引用的方式;‘=’表明以值傳遞的方式捕獲,除非專門指出。
  2. Lambda表達(dá)式的參數(shù)列表
  3. Mutable 標(biāo)識(shí)
  4. 異常標(biāo)識(shí)
  5. 返回值
  6. “函數(shù)”體,也就是lambda表達(dá)式需要進(jìn)行的實(shí)際操作

 

將上圖的代碼片段補(bǔ)充完整:

    int x = 10;

    int y = 3;

    int z ;

    z = [=]()mutable throw() -> int { int n = x + y; x = y ; y = n; return n;}();

    cout<<z<<endl;

    cout<<"x:"<<x<<"\t"<<"y:"<<y<<endl;

運(yùn)行結(jié)果為:

13

x: 10  y: 3

因?yàn)槭且灾祩鬟f的方式訪問x,y所以x,y的值并沒有發(fā)生改變

 

現(xiàn)在我們隊(duì)lambda表達(dá)式的基本語(yǔ)法已經(jīng)有一些了解,下面來舉幾個(gè)例子。

 

 

首先這個(gè)例子說明如何向lambda表達(dá)式里面?zhèn)鬟f參數(shù):

#include <iostream>

using namespace std;

int main()

{

   int n = [] (int x, int y) { return x + y; }(5, 4);

   cout << n << endl;

}

運(yùn)行結(jié)果為:9

通過這個(gè)例子我們可以看出,通過“函數(shù)體”后面的‘()’傳入?yún)?shù)。

 

接下來這個(gè)例子可以看出,可以像調(diào)用函數(shù)一樣使用lambda表達(dá)式,但是感覺這種方式和普通函數(shù)的定義與調(diào)用就差不多了,這里只是學(xué)習(xí)使用方式而已。

#include <iostream>

using namespace std;

int main()

{

 

   auto f = [] (int x, int y) { return x + y; };

 

   cout << f(21, 12) << endl;

}

運(yùn)行結(jié)果為:33

 

Lambda表達(dá)式與STL算法一起使用,自己寫測(cè)試代碼的時(shí)候經(jīng)常用到排序、輸出數(shù)組什么的,通過下面列舉的幾個(gè)算法也比較方便:

#include <iostream>

#include <algorithm>

#include <ctime>

using namespace std;

 

int main()

{

    int a[10] = {0};

 

    srand(time(NULL));

    generate(a,a+10,[]()->int { return rand() % 100; });

 

    cout<<"before sort: "<<endl;

        for_each(a, a+10, [&](int i){ cout<< i <<" "; });

 

    cout<<endl;

    cout<<"After sort"<<endl;

    sort(a,a+10);

    for_each(a, a+10, [&](int i){ cout<< i <<" "; });

    return 0;

}

 

Lambda表達(dá)式的嵌套:

#include <iostream>

int main()

{

   using namespace std;

 

   int m = [](int x)

      { return [](int y) { return y * 2; }(x) + 3; }(5);

 

   cout << m << endl;

}

運(yùn)行結(jié)果:13

 

以上代碼在VC10和VC11上都能順利編譯通過。感覺lambda表達(dá)式還是比較有意思的語(yǔ)法,也是我接觸的第一個(gè)VC11擴(kuò)展。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本高清视频在线观看不卡| 亚洲五月婷婷中文字幕| 千仞雪下面好爽好紧好湿全文| 日韩精品第一区二区三区| 精品欧美在线观看国产| 国产精品美女午夜视频| 国产精品一区二区丝袜| 国产日产欧美精品视频| 色婷婷人妻av毛片一区二区三区| 日本丁香婷婷欧美激情| 欧美一区二区黑人在线| 国产一区欧美一区日本道| 亚洲精品一二三区不卡| 91麻豆视频国产一区二区| 欧美午夜一级特黄大片| 在线懂色一区二区三区精品| 久久久免费精品人妻一区二区三区| 国内胖女人做爰视频有没有| 日本午夜福利视频免费观看| 91播色在线免费播放| 亚洲视频在线观看免费中文字幕| 日韩特级黄片免费观看| 国产精品午夜一区二区三区| 午夜激情视频一区二区| 太香蕉久久国产精品视频| 欧美综合色婷婷欧美激情| 日韩不卡一区二区在线| 精品偷拍一区二区三区| 日韩在线欧美一区二区| 日本黄色录像韩国黄色录像| 玩弄人妻少妇一区二区桃花| 午夜视频在线观看日韩| 加勒比东京热拍拍一区二区| 91久久精品国产一区蜜臀| 亚洲一区二区三区在线免费| 亚洲综合一区二区三区在线| 亚洲欧美日韩另类第一页| 日本精品中文字幕人妻| 日韩一级欧美一级久久| 韩日黄片在线免费观看| 久久中文字幕中文字幕中文|