什么是lamda表达式?
我们首先来看一下这一片代码:
1 class Solution { 2 public: 3 int singleNumber(int A[], int n) { 4 // Note: The Solution object is instantiated only once and is reused by each test case. 5 int retval = 0; 6 for_each(A, A+n, [&retval](int val){retval ^= val;}); 7 return retval; 8 } 9 };
看一下第六行的代码,for_each是C++用来处理container的一个很好用的东西(虽然只是经常用来print一下),第三个参数是个函数,对于前面的参数进行处理的函数。具体可以参考这里。
http://www.cplusplus.com/reference/algorithm/for_each/
第三个参数就是鼎鼎大名的lamda表达式了。楼主也是刚知道这是C++11的新特性,对于用着十年前教材的大学来说是肯定不会教的啦==
简单来说,lamda表达式就是一个匿名函数。
基本语法结构是[](){};
其中[]是变量捕获列表,用来声明需要捕获的外部变量;
()是参数列表部分;
{}是函数体部分。
看个例子:
[](int a, int b){ return a + b; };
C++ Lamda表达式的参数列表中参数需要声明类型;函数体不能省略{}符号和return关键字;即使单条语句时也不能省略。
显式声明需要捕获的外部变量,举个栗子:
1 void HostingFunction() 2 { 3 int c = 1; 4 auto f = [c](int a, int b){ return a + b + c; }; 5 }
代码中声明了需要捕获外部变量c,则函数体中即可引用变量c,否则不能引用。不同于C# Lamda表达式,上述例子中对变量c的改变并不能影响f的行为,因为捕获的c是以值类型捕获的,也即是一份拷贝。如果对变量c采取按引用的方式捕获,则变量c的改变会影响f的行为。如下:
1 void HostingFunction() 2 { 3 int c = 1; 4 auto f = [&c](int a, int b){ return a + b + c; }; 5 }
这个时候,我们就可以看懂文章最开始的代码了~
1 int retval = 0; 2 for_each(A, A+n, [&retval](int val){retval ^= val;});
表示retval对于每个val进行异或操作。最后的结果保存在retval中。
这个题目是:https://leetcode.com/problems/single-number/
具体为什么要异或呢,大家想一想吧~~~
转载于:https://www.cnblogs.com/shenbingyu/p/4643822.html
什么是lamda表达式?相关推荐
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate). 声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...
- 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式...
为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...
- Java --Lamda表达式
Lamda:属于函数式编程的概念: interface IMessage {public void print() ; } public class TestDemo {public static v ...
- [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用
[.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...
- 带参的信号、lamda表达式及坐标系统
带参的信号.lamda表达式及坐标系统 文章目录 带参的信号.lamda表达式及坐标系统 一.带参的信号 二.lamda表达式 三.坐标系统 一.带参的信号 1. 自定义信号(这个信号不像标准信号是一 ...
- 静态内部类、局部内部类、匿名内部类、lamda表达式
普通的继承: 静态内部类( 必须有static修饰): 局部内部内(写在任意方法中的): 匿名内部类(可以写在任意位置): lamda表达式(感觉像匿名内部类的简化)(前题是函数式接口:接口中只有一个 ...
- 一个小案例精通lamda表达式与函数式接口
前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...
- c++ lamda表达式调用自身实现定时器
刚好要做一个定时器,用asio的deadline_timer,通过异步等待方式去做,超时后重新设置超时时间再重新异步等待. 将lamda表达式放到function中,异步等待的时候再调用自身. 具体代 ...
- [ASP.NET MVC]让Html.RenderAction支持Lamda表达式
今天在ASP.NET MVC代码时用到了Html.RenderAction,代码如下: @{Html.RenderAction("RecentNews")} 通过字符串指定Acti ...
最新文章
- WMI问题全解(Windows管理规范)
- hdoj1428 -- 漫步校园 (记忆化搜索)
- sh: react-scripts: command not found after running npm start
- Siamese网络(孪生神经网络)详解
- 全志科技公司A83T Qt 支持双屏显示
- Jenkins 与 Kubernetes 的 CI 与 CD Git + Maven + Docker+Kubectl
- SEO|搜索引擎优化(如何让你的网站排名靠前)
- 界址点圆圈怎么生成_技巧|CASS10.1的界址点圆圈如何变细?
- 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists
- C语言__LINE__实现原理
- jedis连接池的maxIdle和maxtotal参数
- Shell Curses 函数库
- pythonzip压缩字符串_Python压缩与解压缩ZIP文件的实现方法
- 三个月备战,终获阿里offer
- 功夫小子实践开发-具有简单AI的怪物类的分析和实现
- 一文搞懂什么是禁忌搜索算法Tabu Search【附应用举例】
- 关于排队模型的一些名词解释(随笔)
- 计算机毕业设计asp.net家庭个人理财系统(源码+系统+mysql数据库+Lw文档)
- Android network框架分析之NetworkManagementService和netd交互深入分析(二)
- SVG_9_线性颜色渐变_竖排文字_动画