都21世纪了,我看谁还不会用匿名函数(lambda函数)

        最近浏览帖子,发现有很多新手在从大到小排序时,先用了sort从小到大排序,再用reverse进行反转,这样让我看得非常觉得新手!sort可以传入比较大小函数,这样一步达到想要结果,可是需要单独写比较函数,很多人就直接弃用了!这完全是没有了解lambda函数,我来做个总结,让你的代码变得顺畅起来吧!(都是我平时用到的lambda函数的经验总结)

1、从大到小排序这样写更高级!

错误示范网帖

改进:

结构体、自定义类型等快速排序,也可以用:

先来了解一下匿名函数,不想知道细节的直接跳过!

匿名函数的几大要素

  1. 捕获列表:按值捕获[=]和按引用捕获[&]
  2. 可变性(mutable关键字):默认不添加不修改捕获的外部变量,加上就可以修改,如

  3. 参数列表:Lambda 函数的参数列表与普通函数一样,但可以省略参数名,只保留参数类型。
  4. 返回类型推导: 一般加->类型C++14 以后可以自动推导,不加也没事
  5. 函数指针:Lambda 函数本质上是函数的快速写,可以用函数指针传递,当然也可以用异常等等函数的行为。

2、使用STL时不妨用Lambda 函数

	std::vector<int> numbers = { 1, 2, 3, 4, 5 };

	//累加
	int sum = std::accumulate(numbers.begin(), numbers.end(), 0,
		[](int a, int b) {return a + b; });

	//容器过滤
	std::vector<int> even_numbers;
	std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(even_numbers),
		[](int x) {return x % 2 == 0; });

	//元素转换
	std::vector<int> squared_numbers;
	std::transform(numbers.begin(), numbers.end(), std::back_inserter(squared_numbers),
		[](int x) {return x * x; });

	//自定义查找
	auto it = std::find_if(numbers.begin(), numbers.end(),
		[](int x) {return x % 2 == 0; }); // 找到第一个偶数

经常for循环的,可以用这个!比如数组中都增加、相乘一个数字,等等就可以用到上诉:元素转换

3、快速便捷的一个小函数

作为参数,快速实现函数的调用,比如:

比如:函数传参

void performOperation(int x, int y, std::function<int(int, int)> operation) 
{
    std::cout << operation(x, y) << std::endl;
}

int main() 
{
    performOperation(3, 4, [](int a, int b){ return a + b; });  // 输出 7
    return 0;
}

比如:简单函数定义

#include <iostream>

int main() {
    auto add = [](int a, int b) {
        return a + b;
    };

    auto subtract = [](int a, int b) {
        return a - b;
    };

    std::cout << "加法结果: " << add(3, 4) << std::endl;        // 输出 7
    std::cout << "减法结果: " << subtract(8, 5) << std::endl;   // 输出 3

    return 0;
}

4、递归函数

     用到最多就是STL里面的了,目前想不到了,后续再工作中遇到的话,再来补充吧,未完待续!

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值