C++11_ Lambda
版权声明:本文为博主原创文章,未经博主允许不得转载。
这次主要介绍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的更多相关文章
- 你知道C#中的Lambda表达式的演化过程吗?
那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- Lambda
Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- 如何设计一门语言(七)——闭包、lambda和interface
人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...
随机推荐
- 设置HTML5的video播放速度
var speed = 1.5;//设置速度 var vdo = document.getElementById("视频的id");//获取id vdo.playbackRate ...
- Web安全学习笔记之Nmap脚本编写
0x00 Nmap脚本简介 夜无眠,看了一下Nmap官方的英文API文档(全是English),瞬间心态崩塌,不想吐槽它们的nmap官网前端太丑了=.=,但是都是大牛啊,挺敬佩开源开发者的. Nmap ...
- 20145329 《Java程序设计》实验二总结
实验指导教师:娄嘉鹏老师 实验日期:2016.4.12 实验时间:15:30~17:30 实验序号:实验二 实验名称:Java面向对象程序设计 实验目的与要求: 1.初步掌握单元测试和TDD 2.理解 ...
- 《Java程序设计》第一次实验实验报告
北京电子科技学院(besti)实验报告 课程:java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:java开发环境的熟悉(linux + eclipse) 程 ...
- Linux下C连接MySql数据库
目录: 一.解决小的问题: 二.大问题,如果你不小心把/usr/lib的所属用户改了导致sudo命令用不了: 三.C连接MySql编程本身: 其实写这个程序真的很简单,十多分钟的事情,只是以前没在Li ...
- Http中Get和Post的区别(转载)
在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可 ...
- 什么是“QQ登录OAuth2.0”
1. 什么是“QQ登录OAuth2.0 OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他 ...
- Linux内核分析方法谈
本文来自 http://blog.csdn.net/ouyang_linux007/article/details/7422346 Linux的最大的好处之一就是它的源码公开.同时,公开的核心源码也吸 ...
- uboot的FIT功能
1.FIT介绍 Flattend Image Tree 英文原版介绍: FIT is formally a FDT, which can include images of various types ...
- POJ-2479 Maximum sum(动态规划)
最大子序列和的加强版. 借助最大子序列和,分别正向和反向遍历一遍得到left和right数组(具体含义见代码注释) 然后再对left和right数组进行修正,保存从对应元素起向左或向右的最大连续和. ...