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 函数可以快速实现相关功能,避免无意义的函数创建