版权声明:本文为博主原创文章,未经博主允许不得转载。

这次主要介绍C++11的Lambda语法,一个非常给力的语法

1.组成 : [...导入符号](...参数)mutable(可改写)  throwSpec(抛出异常) ->retType(返回值){...}


2.最简单的Lamdba

#include <iostream>

int main(int argc, const char * argv[]) {

    [] {
std::cout<< "hello lambda" <<std::endl;
} (); return ;
}

输出结果


3.重新定义

#include <iostream>

int main()
{
auto l =[] {
std::cout<< "hello lambda111" <<std::endl;
} ; l();//调用
return ;
}

输出结果


4.获取外部变量

int main()
{ //by value
int id = ;
auto f = [id]() mutable{
std::cout<<"id = "<<id<<std::endl;
++id;
};
id = ;
f();
f();
f();
return ;
}

输出结果

可能会很诧异为啥是输出结果为啥是0,1,2,因为传入的外界变量方式是by value,所以外界的id改变 不会改变lambda内的 id

引用传参

#include <iostream>

int main()
{
//by reference
int id = ;
auto g = [&id]() mutable{
std::cout<<"id = "<<id<<std::endl;
id++;
};
id = ;
g();
g();
g();
return ;
}

输出结果


5.带参数

#include <iostream>

int main()
{
//by reference
int id = ;
auto g = [&id](int parm) mutable{
std::cout<<"id = "<<id<<std::endl;
std::cout<<"parm = "<<parm<<std::endl;
id++;
};
id = ;
g();
g();
g();
return ;
}

输出结果


6.有返回值

#include <iostream>

int main()
{
//by reference
int id = ;
auto g = [&id](int parm) mutable{
std::cout<<"id = "<<id<<std::endl;
std::cout<<"parm = "<<parm<<std::endl;
return parm+id;
};
id = ;
int tmp = g();
std::cout<< "tmp = " << tmp << std::endl;
return ;
}

输出结果


7.使代码简化

    vector<int> vi{,,,,,,,,,};
int x = ;
int y = ;
vi.erase(remove_if(vi.begin(), vi.end(), [x,y](int n){return x<=n && n<=y;}),vi.end());
for(auto i:vi)
cout<<i<<endl;

上面这段代码与下面代码意义相同

class ABC_Test_14
{
public:
ABC_Test_14(int a ,int b) :m_a(a),m_b(b){}
bool operator()(int n) const
{
return m_a < n && n < m_b;
} private:
int m_a;
int m_b;
};
...
vi.erase(remove_if(vi.begin(), vi.end(), ABC_Test_14(x,y)),vi.end());

如有错误请指正.

参照<<侯捷 C++新标准 C++11>>

C++11_ Lambda的更多相关文章

  1. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  2. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  3. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  4. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  5. Lambda

    Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...

  6. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  7. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  8. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  9. 如何设计一门语言(七)——闭包、lambda和interface

    人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...

随机推荐

  1. WeX5基础

    最近在研究微信app开发,使用的是WeX5,在这里把一些基础知识点记录下来,忘记了可以翻阅查看. 一:开发后端服务 1.建立数据源:窗口--首选项--studio配置--数据源--增加--数据源类型选 ...

  2. 在VS2012中采用C++中调用DLL中的函数(4)

    转自:http://www.cnblogs.com/woshitianma/p/3683495.html 这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天 ...

  3. 【ES6】改变 JS 内置行为的代理与反射

    代理(Proxy)可以拦截并改变 JS 引擎的底层操作,如数据读取.属性定义.函数构造等一系列操作.ES6 通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接近 JS 引擎的能力. 一.代 ...

  4. awk循环语句-【AWK学习之旅】

      AWK中两种循环语句:if-else 和 while   控制流语句: 1.if-else 求总数,平均值: [root@monitor awkdir]# awk '$3>6 {n = n ...

  5. 20145324 《Java程序设计》第9周学习总结

    20145324 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作 ...

  6. 20145329 《Java程序设计》第五周学习总结

    20145329 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeE ...

  7. 20145240《网络对抗》Web基础

    Web基础 实验后回答问题 什么是表单? 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  8. jdbctemplate中的queryForInt方法

    今天才发现,原来spring 3.2.2之后,jdbctemplate中的queryForInt已经被取消了! 看下代码: 原来是这样写的: String sql = "SELECT cou ...

  9. creator cocos2d-js-min.js 文件廋身 变小 太大解决方法

    使用的 cocos creator 1.2 版本, 菜单栏 项目 -- 项目设置 -- 模块设置 里面 把不要的模块去掉

  10. Redis维护

    关闭redis [root@--x-x log]# cd /usr/local/redis/bin/ [root@--x-x bin]# ./redis-cli -h shutdown 启动redis ...