C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数
一、lambda表达式
| [ ] | 空捕获列表,lambda不能使用所在函数中的变量 |
| [names] | names是一个逗号分隔的名字列表,都是lambda所在函数的变量,默认情况下,捕获列表中的变量都被拷贝 |
| [&] | 隐式捕获列表,采用引用捕获方式。lambda体中所使用的来自所在函数的实体都采用引用方式使用 |
| [=] | 隐式捕获列表,采用值捕获方式。lambda体中所使用的来自所在函数的实体都采用饮用方式使用 |
| [&,identifer_list] | identifer_list是一个逗号分隔的名字列表,包含0个或多个来自所在函数的变量,这些变量都采用值捕获方式,而不在这些列表中的变量则使用引用捕获方式, identifer_list中变量前不能使用& |
| [=,identifer_list] | identifer_list是一个逗号分隔的名字列表,包含0个或多个来自所在函数的变量,这些变量都采用引用捕获方式,而不在这些列表中的变量则使用值捕获方式,identifer_list中的名字不能包括this,且这些名字前必须使用& |
void func(){
size_t i = 0;
auto f = [i] () mutable { return ++i; }
cout << "i = " << i << endl;
}
输出 i = 1
transform(v.begin(), v.end(), v.begin(), [] (int i) {if (i < 0) return -i; else return i;})
这段程序将产生错误,因为编译器推断出lambda返回一个void,但它返回一个int值。
transform(v.begin(), v.end(), v.begin(), [] (int i) -> int {if (i < 0) return -i; else return i;})
二、参数绑定 bind函数
auto newCallable = bind(callable, arg_list);
newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。当我们调用newCallable时,newCallable会调用callable,并传递给callable对应的参数arg_list。
using std::placeholders::_n
// g是一个有两个参数的可调用对象
auto g = bind(f, a, b, _2, c, _1);
这样一来,我们传递给g对象的参数,按位置绑定到占位符上,第一个参数绑定到_1, 第二个绑定到_2.
// 错误,不能拷贝os
for_each(words.begin(), words.end(), bind(print, os, _1, ' '));
我们不能拷贝一个ostream对象,如果我们希望传递给bind一个对象但不拷贝它,就必须使用标准库ref函数。
C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数的更多相关文章
- C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法
大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ● find算法,算法接受一对迭代 ...
- lambda表达式与bind函数
#include<iostream> #include<algorithm> #include<sstream> #include<vector> #i ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...
- kotlin之lambda表达式和匿名函数
lambda表达式,称为匿名函数,是一种函数字面值,也就是没有声明的函数,但可以作为表达式传递出去. 函数类型: 对于接受另一个函数的作为自己的参数,必须针对这个参数指定一个函数的类型如 fun &l ...
- Python函数与lambda 表达式(匿名函数)
Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...
- C# 委托(delegate)、泛型委托和Lambda表达式
目录 # 什么是委托 # 委托声明.实例化和调用 1.声明 2.委托的实例化 3.委托实例的调用 4.委托完整的简单示例 #泛型委托 1.Func委托 2.Action委托 3.Predicate委托 ...
- Lambda表达式公共拼接函数(原创)
#region Lambda公共拼接函数 /// <summary> /// LambdaWhere(枚举) /// </summary> public enum Lambda ...
- 第三天 函数 三元运算 lambda表达式 内置函数 文件操作
面向过程: 直接一行一行写代码,遇到重复的内容复制黏贴. 不利于代码阅读 代码没有复用 面向对象 将代码块定义为函数,以后直接调用函数 增强了复用性 函数的定义方法 def 函数名(传递参数): 函数 ...
- lambda表达式,map函数
lambda只是一个表达式,不需要定义函数,故也是匿名函数,用法为:lambda 参数:表达式. x=5 list1=[2,3,4] list2=[10,20,30] s=lambda x:x**3 ...
随机推荐
- 编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里
application/x-www-form-urlencoded与 multipart/form-data: Fom表单中如果没有type=file的控件,用默认的application/x-www ...
- MySql 性能优化杂记
前一段时间接触MySql 服务器,关于查询忧化方面整理,优化主要唯绕几个工具函数 : show profiling , explain , 索引 , limit 如果上司抱怨服务器查询太慢,这时候 ...
- 【C语言学习】-02 分支结构
本文目录: 一.BOOL布尔类型 二.关系运算符 三.逻辑运算符 四.if语句 五.枚举类型 六.switch语句 一.BOOL布尔类型 BOOL数据类型,是一种表示非真即假的数据类型,布尔类型的变量 ...
- UVA 10294 等价类计数
题目大意: 项链和手镯都是若干珠子穿成的环形首饰,手镯可以旋转和翻转,但项链只能旋转,给n个珠子,t种颜色,求最后能形成的手镯,项链的数量 这里根据等价类计数的polya定理求解 对于一个置换f,若一 ...
- Rhel6-mailsystem配置文档
(postfix+dovecot+mysql+extmail) 理论基础:
- Line计划今年全面进军中国市场:建立本地团队
北京时间6月13日下午消息,<华尔街日报>报道称,移动消息应用Line计划于今年晚些时候进军中国市场.Line将在中国建立本地团队,开发内容和功能,从而进一步开拓中国这一全球最大的移动市场 ...
- Setup Factory 打包.netframework 2.0
在setup factory 的安装目录下的Dependencies中新建目录dotnet20/并放入dotnetfx2.0.exe: Dependencies目录中再加xml文件dotnet20.x ...
- js回调函数
自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...
- 大型HashMap
看到一篇评估大型HashMap的文章,备份几个Collections库. 原文:Large HashMap overview: JDK, FastUtil, Goldman Sachs, HPPC, ...
- 配置VS2010具有代码提示功能
Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual St ...