首页 > 其他分享 >Lambda 表达式

Lambda 表达式

时间:2024-03-02 16:35:36浏览次数:16  
标签:return int auto C++ 表达式 Lambda

今天在看题解的时候,发现了一个有意思的写法,就是在函数内直接定义一个类似函数的东西,了解了一下其实是 c++ 11 引入的 Lambda 表达式。

Lambda 表达式

ISO C++ 11 标准的一大亮点是引入 Lambda 表达式。基本语法如下:

[capture list] (parameter list) -> return type { function body }

其中“[ ]”是捕获列表,可以为空,

[=] 按值的方式捕获所有变量,

[&] 按引用的方式捕获所有变量.

C++中,一个 lambda 表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda 必须使用尾置返回来指定返回类型。

例如调用 <algorithm> 中的 std::sort,ISO C++ 98 的写法是要先写一个compare函数:

bool cmp(int& a,int& b) 2{ 3  return a>b; 4}

然而,用 ISO C++ 11 标准新增的Lambda表达式,可以这么写:

sort(a,a+n,[](int a,int b){return a>b;});//降序排序

这样一来,代码明显简洁多了。

由于Lambda的类型是单一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:

auto f=[](int a,int b){return a>b;};

和其它语言的一个较明显的区别是 Lambda 和 C++ 的类型系统结合使用,如:

auto f=[x](int a,int b){return a>x;};//x被捕获复制 
int x=0, y=1; 
auto g=[&](int x){return ++y;};//y被捕获引用,调用g后会修改y,需要注意y的生存期 

标签:return,int,auto,C++,表达式,Lambda
From: https://www.cnblogs.com/alloverzyt/p/18048772

相关文章

  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......
  • .NET 全能 Cron 表达式解析库(支持 Cron 所有特性)
    前言今天大姚给大家分享一个.NET全能Cron表达式解析类库,支持Cron所有特性:TimeCrontab。Cron表达式介绍Cron表达式是一种用于配置定时任务的时间表达式。它由一系列字段组成,每个字段代表任务在不同时间维度的调度规则。Cron表达式常用于各种系统中,如操作系统的定时任务、......
  • C++填坑系列——lambda表达式
    lambda表达式总结:lambda表达式原理:被编译器转换为类+初始化对象的代码;格式:[captureslist](paramslist)specifiersexception->retType{funtionbody}按值捕获和按引用捕获的优缺点以及解决方法;一.lambda原理lambda函数会被编译器转换为类,并定义实现一个operato......
  • Lambda实现条件去重distinct List
    原文链接:https://blog.csdn.net/qq_39940205/article/details/114269686  _______________________________________________________________________________________________________________我们知道,Java8lambda自带的去重为distinct方法,但是只能过滤整体对象,不......
  • 利用表达式树合并对象
    js我们常用这种写法{...a,...b}C#中有时候也需要这样写,比如使用EFCore查询单表,又需要从另一张表取两个字段,两张表的字段合并到一个对象里面,最后返回一个集合典型的就是b表只存了外键人员id,需要查询a表和a表中外键对应的姓名比如student{studentName,sid},学生表course ......
  • Java匿名内部类 labmda表达式 传统风格 对比
    传统风格classMyInvocationHandlerimplementsInvocationHandler{   @Override   publicObjectinvoke(Objectproxy,Methodmethod,Object[]handlerArgs)throwsThrowable{       if("eat".equals(method.getName())){           System......
  • 150. 逆波兰表达式求值 C
    intevalRPN(char**tokens,inttokensSize){int*stack=(int*)malloc(sizeof(int)*tokensSize);for(inti=0;i<tokensSize;i++)stack[i]=0;inttop=-1;for(inti=0;i<tokensSize;i++){if(tokens[i][0]=='+'){i......
  • .NET 全能 Cron 表达式解析库,支持 Cron 所有特性【转】
    本文简介本文将为你介绍一款在.NET环境下功能全面的Cron表达式解析库——TimeCrontab。这个库不仅支持Cron的所有特性,还提供了易于使用的API,帮助开发者轻松构建和管理定时任务。无论你是开发Web应用、后台服务还是桌面程序,TimeCrontab都能满足你的需求,让你的定时任务......
  • 前中后缀表达式学习笔记
    前言表达式是数学和计算机编程中常见的概念,用于表示运算和计算过程。前缀、中缀和后缀表达式都是不同的方式来表示数学表达式,它们在计算机科学和计算器设计中都有一定的应用。中缀表达式(InfixExpression):这是最常见的数学表达式表示方法,也是人们通常在书写数学公式时使用的方式......
  • 后缀表达式
    一、题目描述P8683[蓝桥杯2019省B]后缀表达式二、算法简析显然,这道题要用贪心思想。想当然的,我们会先进行降序排序,将大的相加,在减去小的。然而,这种想法是错误的。因为这道题要求的是后缀表达式的最大值,为了便于理解,我们转换为中缀表达式的最大值,这里就有了一个隐含条件—......