吴晓阳
发布于 2024-10-20 / 31 阅读
0

c++ lambda表达式

[capture list] (parameters) -> return_type {  
   // 函数体  
};

#include <iostream>
#include <vector>
#include <algorithm>

struct Node {
    int v;
    // 其他属性...
};

int main() {
    std::vector<Node> nodes = {{3}, {1}, {4}, {1}, {5}};

    // 使用 lambda 表达式对 nodes 中的节点按照 v 属性进行降序排序
    std::sort(nodes.begin(), nodes.end(), [](const Node& a, const Node& b) {
        return a.v > b.v;
    });

    // 输出排序后的结果
    for (const auto& node : nodes) {
        std::cout << node.v << " ";
    }
    std::cout << std::endl;

    return 0;
}
#include <iostream>

int main() {
    // 定义一个接受两个整数参数并返回它们之和的 lambda 表达式
    auto add = [](int a, int b) -> int {
        return a + b;
    };

    // 使用 lambda 表达式进行加法运算
    int result = add(5, 3);
    std::cout << "5 + 3 = " << result << std::endl;

    return 0;
}

#include <iostream>
// 值捕获示例
int main() {
    int num = 10;
    // lambda表达式值捕获num
    auto lambda = [num](int x) {
        return num + x;
    };
    int result = lambda(5);
    std::cout << "值捕获结果: " << result << std::endl;
    return 0;
}
#include <iostream>
// 引用捕获示例
int main() {
    int num = 10;
    // lambda表达式引用捕获num
    auto lambda = [&num](int x) {
        num++;
        return num + x;
    };
    int result = lambda(5);
    std::cout << "引用捕获结果: " << result << std::endl;
    std::cout << "外部num的值变为: " << num << std::endl;
    return 0;
}
#include <iostream>
// 隐式值捕获示例
int main() {
    int a = 2;
    int b = 3;
    // 隐式值捕获a和b
    auto lambda = [=](int x) {
        return a + b + x;
    };
    int result = lambda(1);
    std::cout << "隐式值捕获结果: " << result << std::endl;
    return 0;
}
#include <iostream>
// 隐式引用捕获示例
int main() {
    int a = 2;
    int b = 3;
    // 隐式引用捕获a和b
    auto lambda = [&](int x) {
        a++;
        b++;
        return a + b + x;
    };
    int result = lambda(1);
    std::cout << "隐式引用捕获结果: " << result << std::endl;
    std::cout << "外部a的值变为: " << a << std::endl;
    std::cout << "外部b的值变为: " << b << std::endl;
    return 0;
}
   #include <iostream>
   int main() {
       int a = 10;
       int b = 20;
       // 对a和b进行值捕获
       auto lambda = [a, b](int x) {
           return a + b + x;
       };
       int result = lambda(5);
       std::cout << "结果: " << result << std::endl;
       return 0;
   }