Lambda始自C++ 11,是一种在表达式或语句内指定函数行为的定义式。

你可以定义函数行为作为对象,以inline实参的形式传给算法作为predicate(判断式)。

eg:

std:transform(coll.begin(), coll.end(),  // source

                     coll.begin(),                 // destination

#include <algorithm>
#include <deque>
#include <iostream>
#include "LambdaTest.h"
#include "../../Core/ContainerUtil.h" using namespace std; deque<int> coll = { , , , , , , , , }; cout << "all elements:" << endl;
ContainerUtil<deque<int>>::printElements(coll); int x, y;
cout << "Input x: ";
cin >> x;
cout << endl;
cout << "Input y: ";
cin >> y;
cout << endl;
auto pos = find_if(coll.cbegin(), coll.cend(), // range
[=](int i) { // search criterion
return i > x && i < y;
}); cout << "first elem >"<< x <<" and <"<< y <<": " << *pos << endl;

[](double d) {          // lambda as function object

                       return d*d*d;

                     });

看个简单的例子:

findFirstInRange.cpp

运行结果:

all elements:   1  3  19  5  13  7  11  2  17

Input x: 5

Input y: 18

first elem >5 and <18: 13

注意点:

[=]

这个符号表明在lambda被声明时已有效的所有符号都以传值(by value)的形式传入lambda体内

[&]

这个符号表明在lambda被声明时已有效的所有符号都以传引用(by reference)的形式传入lambda体内

lambda内部可以改动他们的值

上面例子lambda的等价物

auto pos = find_if(coll.cbegin(), coll.cend(),  // range
    [=](int i) {                 // search criterion
    return i > x && i < y;
});

它等价于

1. 手写的循环

deque<int>::iterator pos;
for (pos = coll.begin;pos!=coll.end(); ++pos)
{
if (*pos > x && *pos < y)
{
break;
}
}

2. predicate(判断式)

bool pred(int I)
{
return I > x && I < y;
} ... pos = find_if(coll.begin(), coll.end(), pred);

STL - C++ 11的Lambda表达式(上)的更多相关文章

  1. STL - C++ 11的Lambda表达式(下)

    关于lambda的基础知识,请参考上一篇的地址如下: http://www.cnblogs.com/davidgu/p/4825625.html 我们再举个STL使用Lambda来进行排序的例子,如下 ...

  2. 「C++11」Lambda 表达式

    维基百科上面对于 lambda 的引入是如下描述的: 在标准 C++,特别是当使用 C++ 标准程序库算法函数诸如 sort 和 find.用户经常希望能够在算法函数调用的附近定义一个临时的述部函数( ...

  3. C++11之lambda表达式

    lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象.lambda表达式的类型在C++11中被称为"闭包类型",也可以 ...

  4. C++11 里lambda表达式的学习

    最近看到很多关于C++11的文档,有些是我不怎么用到,所以就略过去了,但是lambda表达式还是比较常用的,其实最开始学习python的时候就觉得lambda这个比较高级,为什么C++这么弱.果然C+ ...

  5. 【C++11】 lambda表达式

    i.e.int x = 10;int y = 20;int z = [&]{ x = x * x; y = y * y; return x + y;}(); 上面z后面以[]开头的为一个lam ...

  6. C++11之lambda表达式应用

    应用 foreach语句中 #include <time.h> #include <algorithm> using namespace std; void func(int ...

  7. C++11之lambda表达式解析

    什么是Lanmbda? 简短函数,就地书写.常用于向函数(算法)传递函数参数. 语法 Lambda 表达式,[capture](paras)mutable->return type{statem ...

  8. c++11:lambda表达式的使用

    lambda表达式的一般形式: [capture list] (parameter list) -> return type{function body}; 其中,capture list (捕 ...

  9. C++ 11 Lambda表达式

    C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...

随机推荐

  1. python虚拟环境virtualenv下安装MySQL-python

    1.先在windows安装:https://github.com/konglingxi/mysqldb_for_python27 2.按照提示将python主环境中的mysqldb相关文件及文件夹移到 ...

  2. AtcoderGrandContest 016 D.XOR Replace

    $ >AtcoderGrandContest \space 016 D.XOR\space Replace<$ 题目大意 : 有两个长度为 \(n\) 的数组 \(A, B\) ,每次操作 ...

  3. [BZOJ4009][HNOI2015]接水果(整体二分)

    [HNOI2015]接水果 时间限制:60s      空间限制:512MB 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The b ...

  4. ruby -- 修改rubymine的字体大小

     rubymine编辑器默认的字体特别小,如何修改rubymine当中的字体大小?  首先,进入 setting\ide setting\editor\colors&fonts\font    ...

  5. Educational Codeforces Round 12 C. Simple Strings 贪心

    C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves si ...

  6. Pandas中Series和DataFrame的索引

    在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. ...

  7. Windows蓝屏dump文件查看器(转)

    Windbg-分析Windows蓝屏原因利器[转]下载地址先声明下,虽然用windbg诊断蓝屏之前网络上已经有人发过教程了,但就我而言, 学会使用windbg来诊断蓝屏也算是自己的原创吧.以前看一个微 ...

  8. [转].net reactor 学习系列(四)---.net reactor应用场景

    前面已经学习了.net reactor一些基础知识,现在准备学习下实际的应用场景,只是简单的保护和许可证发放场景.如果想应用更高级的场景比如自动化程序许可证的发放及自定义客户端的过期提示等等就需要自己 ...

  9. Java Http 设置代理

    1.今天在Eclipse下面编译一个Http客户端时,发现可以连接局域网,连接不上外部网络,突然想起所用PC是通过代理访问网络的,设置代理后程序可以正常访问网络了: Properties props ...

  10. 【iOS开发-图层】图层的获取与一些属性

    图层 每个控件都有自己的一个图层,这个空间的全部东西就是显示在这个图层上面的,控件本身没有显示东西的功能,仅仅有拥有了图层才干显示东西 图层的获取 CALayer *layer = self.test ...