标签:style io ar 使用 sp 文件 on div 问题
c++中,一个lambda表达式表示一个可调用的代码单元。可以将其理解为一个未命名的内联函数。与函数类似,一个lambda具有一个返回类型、一个参数列表、和一个函数体。但lambda可以定义在函数内部。一个lambda表达式具有如下形式:
[capture list](parameter list) -> return type { function body }
capture list(捕获列表)是一个lambda所在函数中定义的局部变量的列表(通常为空);parameter list, return type和function body和任何普通函数一样,分别表示参数列表、返回类型和函数体。与普通函数不同,lambda必须使用尾置返回来指定返回类型。
在c++中,lambda主要作为算法的可调用对象。可以向算法传递的可调用对象(callable object)包括函数和函数指针,重载了函数调用运算符的类以及lambda表达式。
假如现在想把一个vector中的元素按照逆序排序,可以向sort算法传递函数:
|
|
也可以自己定义一个重载了函数调用运算符()的类
|
|
当然也可以直接用头文件中的函数对象:
|
|
最后一种方式就是使用lambda:
|
|
需要用g++ -std=c++11编译。lambda表达式很容易理解:
[](const int a, const int b) { return a > b; }
捕获列表为空,之后是形参列表,后边是函数体。
什么时候需要用捕获列表呢?假如你想统计一个vector中有多少string的长度大于sz,可以这么用:
|
|
把sz放到捕获列表中就可以统计有多少长度大于sz的string。
可见c++解决问题的方法很多,lambda简化了可调用对象的构建。
在python中,一个完整的lambda“语句”代表一个表达式,这个表达式的定义体必须和声明放在同一行。python中lambda语法如下:
lambda [arg1[, arg2, ... argN]]: experssion
中间的[, arg2, … argN]代表可选行参。python允许用lambda关键字创建匿名函数。lambda表达式返回可调用的函数对象。lambda运作起来就像一个函数,但被调用时,创建一个框架对象。
不带参数的lambda:
|
|
带参数的lambda:
|
|
《c++ Primer Fifth Edition》
《Python核心编程》
标签:style io ar 使用 sp 文件 on div 问题
原文地址:http://blog.csdn.net/pegasuswang_/article/details/41484951