C++11 lambda

来源:互联网 发布:java十个数冒泡排序 编辑:程序博客网 时间:2024/06/01 10:12

c++11 lambda的经典形式是 [capture](params){body}

capture 指定该匿名函数外的哪些参数在body 中使用(捕获)。

[a,&b](){} 表示abody 中可以以值的方式捕获,bbody 中可以以引用的方式捕获。

[=] 表示捕获所有外部自动变量。[] 表示不捕获任何变量。

[capture](params)->ret{body} 表示 caputre 中的变量都是 const 的, ret 指定返回值的类型。

[caputre]{body} 表示无参数,params 可以省略

practice in c++11 lambda :

#include<bits/stdc++.h>using namespace std;int main(){    srand(time(NULL));    vector<int> a(20);    for(auto& v:a) v=rand()%100;    int cnt=0;    //ordinary    sort(a.begin(),a.end(),[&cnt](int x,int y){++cnt;return x<y;});    cout << cnt << endl;    //variables in capture is read-only, below is wrong    // sort(a.begin(),a.end(),[&cnt](int x,int y)->bool{++cnt;return x<y;});    sort(a.begin(),a.end(),[](int x,int y)->bool{return x<y;});    //no params is ok    []{cout << "hello world" << endl; }();    for(const auto &v:a ) cout << v << endl;}
原创粉丝点击