C++ 11(2.0)新特性 08(lambda表达式 关键字汇总)


C++2.0新增了lambda(inline)表达式
int main(int argc, char* argv[])
{
	// 定义一个lambda表达式
	// lambda表达式语法:[capture var...](inType...) mutable(opt) throwAble(opt) -> returnType(opt) { BODY };
	// lambda表达式的类型复制,一般使用auto来声明
	auto lambda1 = []{cout << "Hello LAMBDA" << endl; }/*()*/;// 最简的lambda,必须要有捕捉[]参数和{}Body
	lambda1();// lambda需要手动来调用,只能通过()的形式来调用

	int x = 3, y = 4;
	cout << "x:" << x << " y:" << y << endl;                   // 3 4
	// [...]声明捕捉数据,lambda对外不可见的,通过[...]来声明哪些参数lambda可以使用
	// [...]有两种传递参数的方法:传值和传引用,默认参值,传递引用使用'&',传值使用'='
	// [=,&y]这样表示除了y使用引用类型之外,其余的都是传值
	// 当传值的数据需要在lambda内部进行操作的时候,需要使用mutable来声明有传递值,引用类型不需要声明
	// throw抛异常
	// -> type返回什么类型,返回类型会自动判断
	auto lambda2 = [x, &y](int in)mutable throw(runtime_error) -> int
	{
		x += 1;
		y += 1;
		cout << "x:" << x << " y:" << y << " in:" << in << endl;// 4 5 5
		return x;
	};
	lambda2(5);
	cout << "x:" << x << " y:" << y << endl;                    // 3 5

	// lambda 实例:移除大于minClamp和小于maxClamp之间的数据
	vector<int> v1 = { 21, 34, 13, 56, 79, 81, 30 };
	int minClamp = 30, maxClamp = 80;

	// auto num = _Erase_remove_if(v1, [minClamp, maxClamp](int in) {return in > minClamp && in < maxClamp; }); // VS2019可以这样使用
	// remove_if是从一个迭代器的begin()和end()之间移除满足predicate(断言)成功的数据
	// 执行过程从first一直到end(),但这个first是基于predicate之后的数据
	v1.erase(remove_if(v1.begin(), v1.end(), [minClamp, maxClamp](int in) {return in > minClamp && in < maxClamp; }), v1.end());
	for (auto v : v1) { cout << v << " "; }
	// cout << "\n" << num;
}

输出结果

在这里插入图片描述


C++ 2.0关键字

since C++11是2.0新增的关键
defalut(1)这个关键字有一个内容更新
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值