c++11标准特性

c++11标准特性

这里写图片描述

(1)Lambda表达式的引入标志,在[]里面可以填入=或&表示该lambda表达式捕获(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,&表示一引用的方式;=表明以值传递的方式捕获,除非专门指出。

(2)Lambda表达式的参数列表

(3)mutable 标识

(4)异常标识

(5)返回值

(6)函数体,也就是lambda表达式需要进行的实际操作

#include <iostream>
#include <algorithm>
#include <ctime>

using namespace std;

int main(int argc, char *argv[])
{
    int x = 10;
    int y = 3;
    int z ;

    //以值传递的方式访问x,y所以x,y的值并没有发生改变
    z = [=]()mutable throw() -> int { int n = x + y; x = y ; y = n; return n;}();
    cout<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;

    //以引用的方式访问x,y所以x,y的值发生改变
    z = [&]()mutable throw() -> int { int n = x + y; x = y ; y = n; return n;}();
    cout<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;

    //如何向lambda表达式里面传递参数
    int n = [] (int x, int y) { return x + y; }(5, 4);
    cout<<" n: "<<n<<endl;

    //像调用函数一样使用lambda表达式
    auto f = [] (int x, int y) { return x + y; };
    cout << f(21, 12) << endl;

    //Lambda表达式与STL算法一起使用,输出数组
    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 <<" "; });
    cout<<endl;

    //Lambda表达式的嵌套
    int m = [](int x){ return [](int y) { return y * 2; }(x) + 3; }(5);
    cout << m << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/robothj/article/details/80201475