美文网首页
Lambda函数与表达式

Lambda函数与表达式

作者: wangdsh | 来源:发表于2018-01-13 12:45 被阅读0次

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda表达式完整的声明格式如下:

    [capture list] (params list) mutable exception-> return type { function body }
    

    各项具体含义如下:

    • capture list:捕获外部变量列表
    • params list:形参列表
    • mutable指示符:用来说用是否可以修改捕获的变量
    • exception:异常设定
    • return type:返回类型
    • function body:函数体

    此外,还可以省略其中的某些成分来声明“不完整”的Lambda表达式,常见的有以下几种:

    • [capture list] (params list) -> return type {function body}
    • [capture list] (params list) {function body}
    • [capture list] {function body}

    下面就举一个实例(文件名:lambda.cpp):

    // g++ -std=c++11 lambda.cpp
    #include <vector>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    bool cmp(int, int);
    void print_vector(vector<int> *); 
    
    int main() {
    
        vector<int> a{3, 1, 2}; 
        vector<int> b(a);
    
        print_vector(&a);
        sort(a.begin(), a.end(), cmp);
        print_vector(&a);
    
        print_vector(&b);
        sort(b.begin(), b.end(), [](int a, int b)->bool{return a<b;}); // lambda表达式
        print_vector(&b);
    
        cout << "End." << endl;
    }
    
    bool cmp(int a, int b) {
        return a < b;
    }
    
    void print_vector(vector<int> *v) {
        // 使用迭代器遍历vector
        for (vector<int>::iterator it=v->begin(); it!=v->end(); it++) {
            cout << *it << " ";
        }   
        cout << endl;
    }
    

    编译运行及结果:

    $ g++ -std=c++11 lambda.cpp
    $ ./a.out
    3 1 2 
    1 2 3 
    3 1 2 
    1 2 3 
    End.
    

    参考:
    c++函数 | 菜鸟教程
    http://www.runoob.com/cplusplus/cpp-functions.html
    C++ 11 Lambda表达式
    https://www.cnblogs.com/DswCnblog/p/5629165.html

    相关文章

      网友评论

          本文标题:Lambda函数与表达式

          本文链接:https://www.haomeiwen.com/subject/rrdcoxtx.html