Lambda表达式基础使用

//Lambda基本格式
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int num(int fir, int sec)
{
	return fir + sec;
};

int main()
{
	/*Lambda的基本格式*/
	auto fun1 = [] (){return 40; };	//如果忽略(),即等于空括号,没有参数
	cout << fun1()<<endl;

	/*带参数的Lambda,等同于num()函数*/

	//[]为捕获列表 ,()为参数列表, ->定义返回值类型, {}定义函数体内容,  末尾()代表向形参传递的参数
	//与fun1不同的在于,fun1为一个匿名函数,而fun2返回的是一个int类型的数据
	auto fun2=[](int fir, int sec) ->int{return fir + sec; }(1,2);	
	cout << fun2<<endl;

	/*Lambda表达式嵌套*/
	auto sum=[](int x) ->int{return	 [x](int y) 		//[x]在捕获列表中,捕获外围lambda表达式中形参x
     					->int{return x + y;}(1);
				}(2);
	cout << "lambda嵌套" << ends << sum<<endl;

	/*如果不需要立即调用,可以用类似函数写法*/
	auto fun3 = [](int x) {
			return	[x](int y) { return x + y;};
	
				};
	int sum1 = fun3(2)(3);
	cout << "Lambda嵌套第二种写法" << ends << sum1 << endl;

}

//捕获列表
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
	/*Lambda捕获----[=]值捕获,不可修改,[&]引用捕获,可修改值*/
	int a = 1;
	int b = 2;
	int c = 3;
	int d = 4;

	//按值捕获,如果需要修改值,则需要加上mutable
	//案例:auto sum=[=]()mutable{return a + b + c + d; };
	auto sum=[=](){return a + b + c + d; };
	cout << sum()<< endl;

	//引用捕获
	auto sum1 = [&]() {return (a++) + b + c + d; };	//如果使用值传递,则a++为不可改变的左值
	cout << sum1() << endl;

	//值传递+引用传递
	 a = 1;
	auto sum2 = [a,b,&c,&d]() {return a + b + (++c) + (++d); };
	cout << sum2() << endl;
	//[=,a,b,c,d]--[&,a,b,c,d] 使用=/&符加参数列表也可以方便捕获,
	//							但是之后位置则不可以出现不同捕获方式.
}

//Lambda使用案例
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;

bool comp(int val1,int val2) 
{
	return val1 < val2;
}
int main()
{
	/*Lambda使用案例*/
	
	vector<int> v ={30,50,80,40,90,70,10};

	for (const auto&i:v)
	{
		cout <<i<<ends;
	}
	cout <<"算法之前"<< endl;
	sort(v.begin(),v.end(),comp);

	for (const auto& i : v)
	{
		cout << i<<ends;
	}
	cout << "算法之后" << endl;
	/*之前需要使用谓词,可以使用Lambda来进行自定义排序*/

	vector<int> v1 = { 5,9,3,4,1,7 };
	for (const auto& i : v1)
	{
		cout << i << ends;
	}
	cout << "Lambda算法之前" << endl;

	sort(v1.begin(), v1.end(), 
		[&](int vi1, int vi2) {return vi1 < vi2;});

	for (const auto& i : v1)
	{
		cout << i << ends;
	}

	cout << "Lambda算法之后" << endl;
	
	//使用Lambda表达式之后,可以取代之前的谓词

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值