C++学习笔记 27 lambda表达式
一、lambda的出处
λ(Lambda)是希腊字母表中的第十一位字母,中文译名“兰木达”,国际音标为['læmdə],广泛应用于物理学、计算机科学、工程学等领域,代表波长、匿名函数等核心概念。
λ演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。它由数学家阿隆佐·邱奇在20世纪30年代首次发表。
Lambda表达式(Lambda expression)是一种匿名函数,源自数学中的λ演算,属于程序设计领域的匿名函数实现方式。其核心特征为通过简洁语法替代传统函数定义,可直接转换为匿名方法,并与闭包概念相关联。
二、程序中的lambda
lambda的本质是我们定义一种叫匿名函数的方式,不需要实际创建一个函数,就像一个快速的一次性函数,展示下需要运行的代码。C++11
何时使用lambda?
只要你有一个函数指针,你都可以在C++中使用lambda表达式
lambda的用法是:在我们设置函数指针指向函数的任何地方,我们都可以将它设置为lambda。
lambda概述
所以,lambda是我们不需要通过函数定义,就可以定义一个函数的方法。
如何看待lambda?
我们更想将它视为一个变量,而不是像一个正式的函数那样,在我们实际编译的代码中作为一个符号存在。
三、lambda: 传递算法,指定未来想要运行的代码
https://cppreference.com/w/cpp/language/lambda.html
lambda的 captures 什么是捕获?
如果我们想把外部变量放到lambda函数内部的指令中,

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
//num: 参数
//func: 处理这个参数的lambda算法
void runLambdaParam(int num, const std::function<void(int)>& func) {
func(num);
}
//vec: 参数
//func: 处理这个参数的lambda算法
void ForEachVector(const std::vector<int>& vec, const std::function<void(int)>& func) {
for (int value : vec) {
func(value);
}
}
void lambda() {
int a = 10;
std::vector<int> values = { 1, 2, 3, 4, 5 };
//[=]:传递所有的变量,通过 值 传递
//[&]:传递所有的变量,通过 引用 传递
auto lambda = [=](int value) {std::cout << "Value:" << a << std::endl; };
runLambdaParam(1, lambda);
//auto lambda2 = [=](int value) { std::cout << "Value:" << value << std::endl; };
//auto lambda2 = [=](int value) { std::cout << "Value:" << a << std::endl; };
auto lambda2 = [=](int value) mutable {a = 20; std::cout << "Value:" << a << std::endl; };
ForEachVector(values, lambda2);
//#include<algorithm>
auto it = std::find_if(values.begin(), values.end(), [](int value) {return value > 3; });
std::cout << "first > 3 value is :" << *it << std::endl;
}
int main() {
lambda();
std::cin.get();
}

浙公网安备 33010602011771号