Lambda 是定义匿名函数的方式,使用该方法创建函数,并不需要实际创建一个函数,更像是一个快速搭建的一次性函数,实现所需的功能。与其说是一个函数,其实更像是一个变量。不用通过函数定义就可以定义一个函数的方法。

Lambda 是干什么的

只要有使用函数指针的地方,就可以使用 lambda 函数

#include<iostream>
#include<vector>
 
void ForEach(const std::vector<int>& values, void(*func)(int))
{
	for(int value:values)
		func(value);
}
 
int main()
{
	std::vector<int> values = {1,5,4,2,3};
	
	auto lambda = [](int value) {std::cout << "Value: " << value << std::endl;}
	ForEach(values,lambda);
}

Lambda 函数的 [] 就像普通函数的参数列表一样,可以将外部变量传入到 lambda 函数中使用,同样也存在值传递引用传递,更多细节可以查看 lambda 表达式 (C++11 起) - cppreference.com

#include<iostream>
#include<vector>
#include<functional>
 
void ForEach(const std::vector<int>& values, const std::function<void(int)>& func)
{
	for(int value:values)
		func(value);
}
 
int main()
{
	std::vector<int> values = {1,5,4,2,3};
	
	int a = 5;
	
	auto lambda = [=](int value) {std::cout << "Value: " << a << std::endl;}
	
	ForEach(values,lambda);
}

[=] 表示值传递所有变量,[&] 表示引用传递所有变量,[varName] 表示传递指定变量,[&varName] 表示引用传递指定变量。不能使用原始函数指针,需要使用 function 类定义

#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
 
int main()
{
	std::vector<int> values = {1,5,4,2,3};
	
	//在vector中寻找第一个大于3的数
	auto it = std::find_if(values.begin(),values.end(),[](int value){return value>3;});
	
	std::cout << *it << std::endl;
}

在部分函数调用中需要给定规则函数,使用 lambda 函数可以快速实现相关功能,避免无意义的函数创建