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. hdu 1069 动规 Monkey and Banana

     Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  2. jQuery before 和 after

    A.after(B) ==== B.insertAfter(A) B 放在 A 的后面A.before(B) ==== B.insertBefore(A) B 放在 A 的前面 A.append(B) ...

  3. Selenium模拟登陆简书

    from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.c ...

  4. FastReport.Net使用:[21]表格(Table)控件

    对表格控件的一些常用操作 合并单元格:选择需要合并的单元格(按住Shitf多选),然后在右键菜单中选择[合并单元格].         2.删除/插入行 鼠标移到在行头,当鼠标状态变为向右的箭头时点击 ...

  5. Dubbo整合SpringCloud图片显示问题

    Dubbo整合SpringCloud图片显示问题 Tips:公司项目,记录一点经验吧,理解的不对的地方欢迎大神指点 问题:商品图片上传功能(公司没有专门文件服务器)写的保存目录直接是保存在docker ...

  6. [转]Android x86模拟器Intel Atom x86 System Image配置与使用方法

    Android x86模拟器Intel Atom x86 System Image配置与使用方法 前言: 大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),因此 ...

  7. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  8. <摘录>CentOS怎么查看某个命令的源代码

    安装yumdownloader工具: # yum install yum-utils 设置源: [base-src] name=CentOS-5.4 - Base src - baseurl=http ...

  9. HDU 4579 Random Walk (解方程组)

    Random Walk Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)Total ...

  10. introduction to my business card

    http://www.t4f.org/projects/business-card/ After 4 years working in an international IT consulting c ...