c++0x 学习笔记之 lambda
by feng
有了 lambda 的支持之后,写一些函数式的代码更加方便了,比如
123std::vector<
int
> vec;
std::for_each( vec.begin(), vec.end(),
[](
int
i){ std::cout <<i <<
" "
; } );
再比如
12std::sort( vec.begin(), vec.end(), [](
int
i,
int
j)
{
return
std::
abs
(i) < std::
abs
(j); } );
其中的
1[](
int
i,
int
j){
return
std::
abs
(i) < std::
abs
(j);}
就是一个 lambda 对象。这个匿名对象返回的类型是
1decltype(std::
abs
(j)<std::
abs
(j))
需要特别说明的是,只有当 lambda 对象中有 return expression 时,返回类型才可以忽略,否则就是 void。因此,这个 lambda 对象完全写下来是这样的:
12[](
int
i,
int
j) ->
bool
{
return
std::
abs
(i) < std::
abs
(j); }
这其中的 [] 称为 lambda 导引符(lambda-introducer),里边可以是空的,也可以有几个变量名称:
[] // 未定义任何参数
[x, &y] // x 以值传入,y 以引用传入
[&] //所有外部参数皆以引用传入
[=] // 所有外部参数皆以值传入
[&, x] // x 以值传入,其余以引用传入
[=, &z] // z 以引用传入,其余以值传入下边是一个使用外部参数的例子
1234std::vector<
double
> arr;
double
sum = 0;
std::for_each( arr.begin(), arr.end(),
[&sum](
double
d){ sum += std::
exp
(d); } );
其中 sum 以引用传入,相当于计算
并将结果存入 sum 中。
当然,上边也可直接抓取所有外部参数的引用做简化,这在参数很多的时候很有用
补充:软件开发 , C++ ,
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊
- asp
- php
- Delphi
- Matlab
- JSP
- Foxpro
- JS
- C/C++
- C#/ASP.NET
- VC++
- JAVA
- VB
- 汇编语言
- html/css
- CGI
- XML/UML
- wap
- 网站相关
- 网页素材
- python
- 微信小程序
- thinkphp
如果你遇到编程学习难题:
访问www.zzzyk.com 试试CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,