码迷,mamicode.com
首页 > 编程语言 > 详细

STL - C++ 11的Lambda表达式

时间:2015-09-21 11:57:25      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

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

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

eg:

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

                     coll.begin(),                 // destination

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

                       return d*d*d;

                     });

 

看个简单的例子:

findFirstInRange.cpp

#include <algorithm>
#include <deque>
#include <iostream>
#include "LambdaTest.h"
#include "../../Core/ContainerUtil.h"

using namespace std;

deque<int> coll = { 1, 3, 19, 5, 13, 7, 11, 2, 17 };

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;

 

运行结果:

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内部可以改动他们的值

 

STL - C++ 11的Lambda表达式

标签:

原文地址:http://www.cnblogs.com/davidgu/p/4825625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!