[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;
}