C++11中的lambda表达式 c lambda表达式 linq
lambda表达式的语法如下所示:[capture_block](parameters) exceptions_specification-> return_type {body}[捕捉快](参数) 异常-> 返回值类型 {主体}
下面的例子将逐步演示如何使用lambda表达式:
范例一:[]{std::cout<<"Hello fromLambda!"<<std::endl;}();输出如下所示:Hello from Lambda在控制台输出Hello fromLambda,尾部的括号使该表达式可立即执行。
范例二:std::string result=[](const std::string&str)->std::string{return "Hello from "+str;}("secondLambda");std::cout<<result<<std::endl;输出如下所示:Hello from second Lambda该lambda表达式接受一个string参数并返回一个string,结果保存在变量result中,尾部的括号使得该表达式立即执行。
范例三:auto fn=[](const std::string& str) {return"Hello from "+str;};std::cout<<fn("call1")<<std::endl;std::cout<<fn("call2")<<std::endl;输出如下所示:Hello from call 1Hello from call 2此处保存指向lambda表达式的指针,并且通过函数指针执行该表达式。
范例四:(STL与lambda)#include <iostream>#include <algorithm>#include <vector>
auto main(int argc, char** argv) -> int{ std::vector<int> vec={1, 2, 3, 4, 5,6, 7, 8, 9}; int value=3; intcnt=std::count_if(vec.cbegin(), vec.cend(), [=](int i){returni>value;}); std::cout<<"Found"<<cnt<<"values >"<<value<<std::endl;
return 0;}输出如下所示:Found 6 values > 3通过count_if算法计算vector中满足特定条件的元素个数,lambda表达式的形式给出了条件,注意表达式中的=,等号表示通过值捕捉所在作用域的变量,这个例子中捕捉的是value的值。前面的例子[]为空,即捕捉块为空,那么在lambda表达式的主体body内就无法访问变量了。以下是关于捕捉块的详细介绍:[=]通过值捕捉所有变量[&]通过引用捕捉所有变量[value]通过值捕捉value,不捕捉其它变量[&value]通过引用捕捉value,不捕捉其它变量[=, &value]默认通过值捕捉,变量value例外,通过引用捕捉[&, value]默认通过引用捕捉,变量value例外,通过值捕捉
范例五:(STL与lambda结合)#include <iostream>#include <algorithm>#include <vector>
auto main(int argc, char** argv) -> int{ std::vector<int> vec={11, 22, 33,44}; int index=0; for_each(vec.begin(),vec.end(), [&index](inti){std::cout<<"Value"<<(index++) <<":"<<i<<std::endl;});
return 0;}通过for_each算法可以对给定范围中的所有元素执行特定操作,调用lambda表达式,并将这个值作为参数传递给lambda表达式。
范例程序差不多了,在C++11中,官方似乎一直鼓励大家用lambda表达式,而不是函数对象,lambda表达式更易于使用和理解。
更多阅读
《一个女人一生中的二十四小时》精神分析 莫奈一生只画一个女人
意识与潜意识的隐秘互动——《一个女人一生中的二十四小时》精神分析《一个女人一生中的二十四小时》是被称为“灵魂的猎手”的茨威格的名篇,茨威格以一个非常典型的故事揭示了潜意识对意识深刻影响,在表现人物意识行为的潜意识动机
梦中的婚礼钢琴曲简谱,c调板 c调钢琴曲简谱
梦中的婚礼钢琴曲简谱c调板。希望能和喜欢的亲们分享~~呵呵~~
在WORD中的复制,粘贴,剪切的快捷键是什么?电脑操作都有那些常用 复制粘贴剪切快捷键
生活达人在WORD中的复制,粘贴,剪切的快捷键是什么?提问时间:2008-10-14 09:39另外,电脑操作都有那些常用的快捷键啊?相关资料: Ctrl快捷键办公室人要熟练的.doc更多资料Ctrl+C 复制所选文本或对象Ctrl+X
IOS开发_objective-c中的OOP_灵隐__ objective c 开发工具
objective-c中的OOP其实,objective-c本质上就是C语言。首先解释一个简单的小程序。1.入门Hello程序解析。#import<Foundation/Foundation.h> int main(int argc,const char *argv[]){ NSlog(@"Everyone has some helloworlds."); ret
模拟c++中的strstr函数 c语言中strstr函数
/************************************************************************//* 例子:请写出一个函数来模拟c++中的strstr函数:该函数的返回值是主传中字符子串的位置以后的所有字符,请不要使用任何c程序已有的函数函数名: strstr函