我们首先来看一下这一片代码:

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表达式?相关推荐

  1. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  2. 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式...

    为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...

  3. Java --Lamda表达式

    Lamda:属于函数式编程的概念: interface IMessage {public void print() ; } public class TestDemo {public static v ...

  4. [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

    [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...

  5. 带参的信号、lamda表达式及坐标系统

    带参的信号.lamda表达式及坐标系统 文章目录 带参的信号.lamda表达式及坐标系统 一.带参的信号 二.lamda表达式 三.坐标系统 一.带参的信号 1. 自定义信号(这个信号不像标准信号是一 ...

  6. 静态内部类、局部内部类、匿名内部类、lamda表达式

    普通的继承: 静态内部类( 必须有static修饰): 局部内部内(写在任意方法中的): 匿名内部类(可以写在任意位置): lamda表达式(感觉像匿名内部类的简化)(前题是函数式接口:接口中只有一个 ...

  7. 一个小案例精通lamda表达式与函数式接口

    前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

  8. c++ lamda表达式调用自身实现定时器

    刚好要做一个定时器,用asio的deadline_timer,通过异步等待方式去做,超时后重新设置超时时间再重新异步等待. 将lamda表达式放到function中,异步等待的时候再调用自身. 具体代 ...

  9. [ASP.NET MVC]让Html.RenderAction支持Lamda表达式

    今天在ASP.NET MVC代码时用到了Html.RenderAction,代码如下: @{Html.RenderAction("RecentNews")} 通过字符串指定Acti ...

最新文章

  1. WMI问题全解(Windows管理规范)
  2. hdoj1428 -- 漫步校园 (记忆化搜索)
  3. sh: react-scripts: command not found after running npm start
  4. Siamese网络(孪生神经网络)详解
  5. 全志科技公司A83T Qt 支持双屏显示
  6. Jenkins 与 Kubernetes 的 CI 与 CD Git + Maven + Docker+Kubectl
  7. SEO|搜索引擎优化(如何让你的网站排名靠前)
  8. 界址点圆圈怎么生成_技巧|CASS10.1的界址点圆圈如何变细?
  9. 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists
  10. C语言__LINE__实现原理
  11. jedis连接池的maxIdle和maxtotal参数
  12. Shell Curses 函数库
  13. pythonzip压缩字符串_Python压缩与解压缩ZIP文件的实现方法
  14. 三个月备战,终获阿里offer
  15. 功夫小子实践开发-具有简单AI的怪物类的分析和实现
  16. 一文搞懂什么是禁忌搜索算法Tabu Search【附应用举例】
  17. 关于排队模型的一些名词解释(随笔)
  18. 计算机毕业设计asp.net家庭个人理财系统(源码+系统+mysql数据库+Lw文档)
  19. Android network框架分析之NetworkManagementService和netd交互深入分析(二)
  20. SVG_9_线性颜色渐变_竖排文字_动画

热门文章

  1. MSChart使用导航之开发
  2. Node-Web模块
  3. POJ2553 强连通出度为0的应用
  4. C语言经典例69-有n个人围成一圈报数问题
  5. 【C 语言】字符串模型 ( 字符串翻转模型 )
  6. vue-lazyload 的vue 懒加载的使用
  7. 简单实现promise封装
  8. hibernate操作mysql中文乱码
  9. 关于PIC和FPGA
  10. 支付宝PC即时到账和手机网站支付同步