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 委托来 ...
随机推荐
- MySQL【四】---案例实战{拆分多表、外键创建等}
1.准备数据 数据准备 create database jing_dong charset = utf8mb4; 创建一个商品goods数据表: create table goods( id int ...
- 华为云DTSE助力车卫士架构升级,探索智能出行行业数字化新路径
本文分享自华为云社区<华为云DTSE助力车卫士技术架构升级,探索智能出行行业数字化新路径>,作者:HuaweiCloudDeveloper. 毫无疑问,在双碳背景以及先进技术的加持下,智能 ...
- 关于Docker容器中的DNS配置
Docker: 1.启动时指定: docker run --dns 8.8.8.8 busybox:latest 2.全局配置: vi /etc/docker/daemon.json { " ...
- CH32V208蓝牙从机sleep模式下功耗测试
本测试基于CH32V208W的开发板:蓝牙从机模式:使用程序BLE_UART 在进行功耗测试的时候尽量去除额外耗电器件,将开发板上的VDD于VIO相连接,测功耗时直接给VDD供电. 将会对500ms, ...
- 关于Oracle RAC调整网卡MTU值的问题
在Oracle RAC的环境中,如果我们发现OSW监控数据显示包重组失败率过高,就需要引起足够的重视,因为这很可能会引发member kill/Node kill等重大故障,甚至在有些场景会连带影响到 ...
- .NET Core开发实战(第17课:为选项数据添加验证:避免错误配置的应用接收用户流量)--学习笔记
17 | 为选项数据添加验证:避免错误配置的应用接收用户流量 三种验证方法 1.直接注册验证函数 2.实现 IValidateOptions 3.使用 Microsoft.Extensions.Opt ...
- 回顾复习之背包DP
\(\small{(本文统一将c[i]视作cost,w[i]视作worth,下面的代码用这两个变量表示费用和价值)}\) \(\Large\textbf{1. 01背包}\) \(\large\tex ...
- 【Unity3D】基于AssetBundle实现资源热更新
1 前言 Unity3D 本地资源一般放在 Resources 目录下,但是 Resouces 文件夹的大小不能超过 2G,使用 AssetBundle 管理资源可以解决 Resources 文件 ...
- Vuex中的核心方法
Vuex中的核心方法 Vuex是一个专为Vue.js应用程序开发的状态管理模式,其采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.每一个Vuex应用的核心就是 ...
- Laravel入坑指南(3)——模板
各位小伙伴有缘聚到这里,说明对于Laravel的路由和控制器已经有点了解了. 会写业务逻辑之后,如何把结果漂亮地展示出来,就是我们要解决的问题.(前后端分离的同学,请自动忽略)在MVC的世界里,漂亮的 ...