[c语言中的逗号表达式]C#中Func的用法和Lambda表达式的意思

来源:互联网 时间:2017-05-19 编辑: 阅读量:0 手机版

篇一 : C#中Func的用法和Lambda表达式

在C#3.0中引用了Limbda表达式,Limbda表达式实际上就是一个方法,只不过该方法是匿名方法(即没有名称的方法)

代码片段: Func<int,string,string> t=(int x, string b) => (x.ToString() + b);就等于

private string deletegate TestString(intx string b );//定义一个委托,返回值为string类型

private string test(intx string b)

{

return x.ToString() + b;

}

TestString t=new TestString(test);

t(44,"bbb");

Func<int,string,string>就是定义一个委托=private string deletegate TestString(intx string b ),前两个参数是相应方法的参数类型,最后一个为方法的返回类型。

篇二 : C++11中的lambda表达式

C++11添加了一项名为lambda表达式的新功能,通过这项功能可以编写内嵌的匿名函数,而不必编写独立函数和函数对象,使得代码更容易理解。
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::cou[www.t262.com]t<<"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表达式更易于使用和理解。
本文已影响0
  • [身边的科学小知识]身边的科学小知识
  • [五行属土的字大全]五行属土的汉字大全
  • [第一次性经历]女大学生自述第一次性经历
  • [老公每天晚上都要吃奶]老公每晚都要吃奶睡觉都要含着睡
  • [教你扎100种头发]教你扎100种头发儿童,小女孩头发扎法图解!
  • [胡舒立老公]胡舒立背后的大人物是谁 胡舒立老公父亲介绍【财新网背景】
  • [我和我妈妈的真实经历]我的妈妈
  • [哔哩哔哩答题全部答案]最新哔哩哔哩会员注册答题技巧及答案
  • [在深圳合租的日子完整]我在深圳做鸭的日子(完)
  • [幼儿园听课评课记录]幼儿园评课记录
  • [女性生理结构]你了解自己的身体结构吗?揭秘女性生理结构的秘密。
  • [爱新觉罗溥仪后人]溥仪去世,为什么爱新觉罗家族的人不来送葬
  • 热门推荐