九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C++11 lambda表達式

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

Lambda表達式的語法通過下圖來介紹:

 

         這里假設我們定義了一個如上圖的lambda表達式?,F(xiàn)在來介紹途中標有編號的各個部分是什么意思。

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

 

將上圖的代碼片段補充完整:

    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;

運行結(jié)果為:

13

x: 10  y: 3

因為是以值傳遞的方式訪問x,y所以x,y的值并沒有發(fā)生改變

 

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

 

 

首先這個例子說明如何向lambda表達式里面?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;

}

運行結(jié)果為:9

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

 

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

#include <iostream>

using namespace std;

int main()

{

 

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

 

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

}

運行結(jié)果為:33

 

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

#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表達式的嵌套:

#include <iostream>

int main()

{

   using namespace std;

 

   int m = [](int x)

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

 

   cout << m << endl;

}

運行結(jié)果:13

 

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

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++Lambda表達式詳解
Lambda表達式用法超詳細整理?。?!
匿名函數(shù)Lambda認識一下
C++ lambda的類型
揭開C/C++中數(shù)組形參的迷霧
他來了,他來了,C 17新特性精華都在這了
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服