不需要函数定义就可以定义一个函数的方法,用完就丢
原理:只要有函数指针就可以lambda
void f(const vector<int>& nums, void(*g)(int)) { //void(*g)(int) 函数指针
for (auto i : nums)
g(i); //实际是调用了mian里的lambda表达式
}
void x(int value)
{
cout<<value<<endl;
}
int main() {
vector<int>nums = { 1,2,3 };
auto i = [](int value) {cout << value << endl; }; //lambda
f(nums, i);
f(nums, x); //只要是个函数都可以传参,前提是:类型,形参对上
return 0;
}
[]:如何传入变量。里面可以放=、&、某个变量。注意形参要变化了
#include<functional> //funtion头文件
//在 C++ 中,function 是一个通用的函数封装器,可以将各种可调用对象(如函数指针、函数对象、Lambda
//表达式等)存储在一个 function 对象中,并通过该对象进行调用。
void f(const vector<int>&nums,const function<void(int)>& g)
{
for(auto i:nums)
g(i);
}
int main()
{
int a = 10;
vector<int>nums = { 1,2,3 };
//可以mutable在lambda函数体修改捕获传进来的值
auto lambda = [=](int value) mutable{a=100;cout << a << endl; };
f(nums,lambda);
return 0;
}
应用find_if
#include<algorithm>
int main()
{
vector<int>nums = { 4,5,3,1,2 };
auto lambda = [](int value) {return value > 3; };
auto i = find_if(nums.begin(), nums.end(), lambda); //查找nums里第一个比3大的
cout << *i; //返回4
return 0;
}