Lambda表达式(匿名函数)
C++11中引入了lambda表达式,定义匿名的内联函数。
我们可以直接原地定义函数而不用再跑到外面去定义函数跳来跳去。
同时在stl的排序上也有作用。
[capture] (parameters) mutable ->return-type {statement}
下面逐一介绍各个参数的含义.
[capture]
:
- 捕获:作用是让匿名函数能够访问或者修改函数外部的变量
- 有两种一种是值,一种是引用
- 具体怎么用,我们需要用到某些变量,但是又不想传递参数(或者太多了传递不了参数)就可以通过捕获的方式,如果我们要在lambda表达式中修改这些外面的变量就需要捕获引用,如捕获值,那么这些值则不能改变。
值捕获
void solve()
{
int a=3,b=2;
auto change=[=]()
{
return a*b;
};
cout<<change()<<endl;
}
引用捕获
int a=1,b=2;
auto change=[&]()
{
a=3;
b=4;
};
cout<<a<<' '<<b<<endl;
change();
cout<<a<<' '<<b<<endl;
void solve()
{
auto check=[&](int m)
{
rep(i,1,10) if(i<m) cout<<i<<' ';
cout<<endl;
};
check(3);
}
parameters
:参数
- 这个没什么需要解释的和正常函数的参数是一样的都是传递的值
mutable
利用可变规范,Lambda 表达式的主体可以修改通过值捕获的变量。若使用此关键字,则 parameters 不可省略
void solve()
{
int a = 0;
auto func = [a]() mutable
{
++a;
cout<<a<<endl;
};
func();
cout<<a<<endl;
}
但是修改捕获变量的值不会带到匿名函数外部
return-type
:就是函数的返回类型,在算法竞赛很多时候我们可以用auto代替
auto lam = [](int a, int b) -> int
{
return a+b;
}
如果有多种排序规则可以直接用lambda表达式
sort(vec.begin(), vec.end(), [&](PII& a, PII& b) {return a.second > b.second;});
Lambda表达式(匿名函数)的更多相关文章
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口
函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...
- Python:lambda表达式(匿名函数)
lambda表达式: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中 ...
- lambda表达式匿名函数
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. C# 中委托的发展 在 C# 1.0 中,您通 ...
- lambda表达式 匿名函数
lambda函数是一种快速定义单行最小函数的方法,是从Lisp借鉴而来的,可以用在任何需要函数的地方. 基础 lambda语句中,冒号前是参数,可以有多个,用逗号分割:冒号右边是返回值. lambda ...
- C++中对C的扩展学习新增语法——lambda 表达式(匿名函数)
1.匿名函数基础语法.调用.保存 1.auto lambda类型 2.函数指针来保存注意点:[]只能为空,不能写东西 3.std::function来保存 2.匿名函数捕捉外部变量(值方式.引用方式) ...
- 【C++】C++中的lambda表达式和函数对象
目录结构: contents structure [-] lambda表达式 lambda c++14新特性 lambda捕捉表达式 泛型lambda表达式 函数对象 函数适配器 绑定器(binder ...
- Lambda表达式匿名类实现接口方法
Lamb表达式匿名类实现接口方法 import java.util.ArrayList; public class HandlerDemo{ public static void main(Strin ...
- Lambda表达式和函数试接口的最佳实践 · LiangYongrui's Studio
1.概述 本文主要深入研究java 8中的函数式接口和Lambda表达式,并介绍最佳实践. 2.使用标准的函数式接口 包java.util.function中的函数是接口已经可以满足大部分的java开 ...
- 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)
委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来 ...
随机推荐
- jenkins上发布项目后将文件推送到另一台服务器build镜像
1.配置jenkins 1)主页面点击manage jenkins 2) 选择SystemConfiguration 3) 配置服务器信息,注意密码一定要输入对,还有端口有,一般是默认的22端口,但有 ...
- iframe 框架技术
隐性转发 <!doctype html> <html lang="zh_CN"> <head> <meta charset="u ...
- MySQL常用操作指令大全
前言: 一.基础概念 二.子句顺序 三.使用MySQL(USE.SHOW) 四.检索数据(SELECT) 五.排序检索数据(ORDER BY) 六.过滤数据(WHERE) 七.数据过滤(AND.OR. ...
- Redis 数据库配置与应用
Redis 是一个key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. ...
- 驱动开发:WinDBG 常用调试命令总结
Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug.结合M ...
- STL源码剖析 | priority_queue优先队列底层模拟实现
今天博主继续带来STL源码剖析专栏的第四篇博客了! 今天带来优先队列priority_queue的模拟实现!话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕 ...
- 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)
第 3 章 ASP.NET Core 核心特性 3.1 启动与宿主 ASP.NET Core 应用程序启动时,它首先会配置并运行其宿主,宿主主要用来启动.初始化应用程序,并管理其生命周期 ASP.NE ...
- Linux--如何查看磁盘的IO(top、iostat)
问题背景: 在性能测试时,虽然测试出了结果,但是我们并不知道瓶颈是源端,还是目标端.例如我做上传和下载性能验证,从Linux服务器上向OSS集群上传和下载文件,虽然测试出了速率,但是并不知道上传是否存 ...
- 沿SVG路径的颜色渐变
原生的渐变方法 在SVG中提供的原生渐变方法有两种,分别为线性渐变linearGradient和径向渐变radialGradient.我们以一个稍微复杂的路径来作为模板,为其添加两种渐变效果: < ...
- DRF解决跨域问题
Django Rest Framework提供了corsheaders模块解决跨域问题 安装模块 pip3.9 install django-cors-headers 注册应用 # 注册 corshe ...