首页 > 其他分享 >Lambda Expression

Lambda Expression

时间:2024-10-16 11:45:21浏览次数:6  
标签:函数 int 捕获 vec Expression Lambda

一、什么是Lambda Expression ? 作用是什么?

  • Lambda Expression是匿名函数的一种表达方式,就是没有函数名的函数。
  • 用途:函数作为参数传递时,可以直接传Lambda Expression,而不用先定义一个函数,再传函数名。

二、语法

[捕获列表](参数列表) -> 返回类型 { 函数体 }
如:[](const string& name) -> void { cout << "My dear " << name << "I love you "<<endl; };

  • 参数列表:如果没有参数列表,()可以省略不写。不支持默认参数。
  • 返回类型:不写,自动推断。
  • 捕获列表:捕获的本质还是参数传递。
   
        // 捕获方式有值捕获和引用捕获两种,值、引用可以混合使用
	int i = 10;
	int  j = 20;
	auto f1 = [ =, &i] () { return j + i; };  // 全部值捕获,i引用捕获
	auto f2 = [ &, j] () { return i; };       // 全部引用捕获,j值捕获

	// 区别:值捕获的变量不能在lambda函数体内修改,引用可以
}

三、示例

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void show(const int& num)
{
	cout<<"My Dear, you're my "<<num<<endl;
}

class c_show
{
public:
	void operator()(const int& num)const
	{
		cout<<"My Dear, you're my "<<num<<endl;
	}
};

int main()
{
	vector<int> vec={1,2,3,4,5};
	for_each(vec.begin(),vec.end(),show);        // 普通函数,填函数名
	for_each(vec.begin(),vec.end(),c_show());    // 仿函数,填匿名对象

	//函数参数是lambda表达式,直接定义一个匿名函数,而非显示定义再传函数名
	for_each(vec.begin(),vec.end(),
		[](const int& num)
		{
			cout<<"My Dear, you're my "<<num<<endl;
		});

	// 或者给lambda函数起名字f
	auto f=[](const int& num){ cout<<"My Dear, you're my "<<num<<endl; };
	for_each(vec.begin(),vec.end(),f);

	// lambda函数可以单独使用
	f(88);
}

应用:
**1. 排序遍历等stl算法**
vector<int> v = {1, 2, 3, 4, 5};
sort(v.begin(), v.end(), [](int a, int b) { return a > b; });   // 降序排序

**2. 作为回调函数**
void doSomething(function<void()> func) {
    func();
}
doSomething([]() { cout << "Lambda as callback\n"; });

标签:函数,int,捕获,vec,Expression,Lambda
From: https://www.cnblogs.com/albertmak/p/18469546

相关文章

  • day05-Lambda、方法引用、算法、正则表达式
    day05-算法和数据结构一、Arrays类接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些_.1.1Arrays基本使用我们先认识一下Arr......
  • 通过LambdaQueryWrapper配置实现查询指定的字段值
    如果是自己写sql语句,可以很自由的实现查询哪些字段值,但是在使用MybatisPlus提供的CRUD方法的时候我们该如何实现这一效果呢?可以通过LambdaQueryWrapper和QueryWrapper的select方法来做到这一点publicIPage<Customer>page(intcurrent,intsize){log.in......
  • Microsoft Expression Studio 4 MSDN中文旗舰版
    MicrosoftExpressionStudio4MSDN中文旗舰版复制   slice UID79171帖子5494PB币19816贡献0技术64活跃1938   楼主 发表于2010-10-1021:42:52 IP属地重庆本帖最后由slice于2010-10-1021:47编辑cn_expression_st......
  • Lambda函数的理解
    1.基本概念Lambda函数,亦称为Lambda表达式、匿名函数等,是一种函数对象,Lambda函数可以让函数像普通变量一样进行赋值、传递、函数返回等操作。C++中的Lambda函数经常用来解决如下问题:(1)使得程序更加简洁,尤其对于一次性使用的函数。(2)使得函数可以自由流动,就像变量一样,这给函数式编......
  • 【python进阶攻略10】异常、lambda表达式
    异常异常处理是一种艺术,一旦你掌握,会授予你无穷的力量。我将要向你展示我们能处理异常的一些方式。最基本的术语里我们知道了try/except从句。可能触发异常产生的代码会放到try语句块里,而处理异常的代码会在except语句块里实现。这是一个简单的例子:try:file=open(......
  • codeforces round 975 E(div.2)(lambda表达式实现dfs,min_element函数,一定要优化重复的
    解题历程:看到题目要求要用最少的消除次数让所有叶子深度相同,通过观察,那么就只需要将所有深度都尝试一遍就行了,可是我当时没多想就用dfs记录所有节点的深度,单独将所有叶子和该叶子的深度存起来,记录最大的深度,从最大深度尝试到深度0,对于深度小于当前尝试深度的叶子,用dfs的方式将与......
  • Java lambda表达式
    概述:今天推荐一篇!Java1.8的新特性之lambda表达式,它非常的方便,可以用来简化匿名内部类哦。能够以更清晰、直观的方式表达代码的逻辑。极大的简化了代码的数量。⌨️⌨️⌨️不会匿名内部类的小伙伴可以博主下面这篇文章哦:Java匿名内部类https://blog.csdn.net/ouhexie/article/deta......
  • 21 lambda表达式本质 讲解
    lambda表达式本质是函数+未执行则内部代码不会调用+参数size=10func_list=[lambdax:x+1+size,lambdax:x+2+size,lambdax:x+3+size]ret=func_list[1](100)#此时的x为lambda函数的参数,如果调用函数时,需要进行传参print(ret)#返回值为:111la......
  • 22 lambda 练习
    **```py练习题1USER_LIST=[]deffunc0(x):v=USER_LIST.append(x)#列表.append没有返回值v=None,insert/extend也没有返回值returnv#将None进行返回result=func0('alex')print(result)练习题2deffunc0(x):v=x.strip()#将去除空格的字符串.生成新的值......
  • Lambda函数
    C++中的Lambda函数在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。语法[capture](parameters)->r......