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: 传递算法,指定未来想要运行的代码

C++ reference网站

https://cppreference.com/w/cpp/language/lambda.html

lambda的 captures  什么是捕获?

如果我们想把外部变量放到lambda函数内部的指令中,

image


#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();
}
posted @ 2025-12-19 14:39  超轶绝尘  阅读(23)  评论(0)    收藏  举报