郑州网站运营,企业网站服务器选择,seo1网站查询,关于网站开发的论文文献C lamdba 表达式 Lambda表达式是C11引入的一个新特性#xff0c;它允许我们在需要函数对象的地方#xff0c;使用一种更加简洁的方式定义匿名函数。Lambda表达式通常用于STL中的算法、回调函数、事件处理程序等场合。 Lambda表达式的基本语法为#xff1a;
Copy Code[captu…C lamdba 表达式 Lambda表达式是C11引入的一个新特性它允许我们在需要函数对象的地方使用一种更加简洁的方式定义匿名函数。Lambda表达式通常用于STL中的算法、回调函数、事件处理程序等场合。 Lambda表达式的基本语法为
Copy Code[capture list](parameter list) mutable exception - return type { function body }
lamdba表达式在什么场合下使用
C11 lambda表达式可以用来创建匿名函数也就是没有函数名的函数。它们在很多场景下都非常有用例如 在STL算法中传递自定义的排序、查找或过滤函数 在多线程编程中创建异步任务和回调函数 在GUI编程中处理事件处理器和回调函数
其中 Capture clause指定了lambda表达式访问外部变量的方式可以是传值、引用或者隐式捕获 Parameters是参数列表与普通函数的参数类似 Return type是返回值类型可以省略编译器会自动推断 Function body是函数体部分包含实际要执行的代码
例如以下是一个简单的lambda表达式示例用于将两个整数相加并输出结果
[](int a, int b) - int { return a b; }
在使用lambda表达式时可以将它作为一个函数对象来使用例如
auto sum [](int a, int b) - int { return a b; };
int result sum(10, 20);
这里我们先定义了一个lambda表达式sum然后使用它来计算10和20的总和并将结果存储在result变量中。
需要注意的是lambda表达式的主要特点是可以在运行时创建因此比传统的函数指针和函数对象更加灵活和直观。
完整案例
#includeiostream
#includevector
#includefunctional
#includealgorithm
using namespace std;
void ForEath(const vectorintvalues,const functionvoid(int)func)
{for(int value:values)func(value);//
}
int main()
{vectorintnums;auto sum [](int a,int b)-int {return ab;}; // lambda 表达式int(*s)(int,int) [](int n,int m){return nm;}; //指定返回类型需要使用函数指针形式
coutsum(1,2)endl;couts(1,2)endl;int x 1;//捕获外部元素auto S [x](int n) mutable{int sum 0;for(int i 1;in;i){sumi*i;}return sum;};coutS(3)endl; //输出 14coutxendl; // 输出 1std::vectorint v {1, 2, 3, 4};// 使用lambda函数将每个元素加倍std::transform(v.begin(), v.end(), v.begin(), [](int x) { return x * 2; });for (auto i : v) {std::cout i ; // 输出: 2 4 6 8 }coutendl;vectorint values {1,2,3,4,5};auto it find_if(values.begin(), values.end(), [](int value) {return value 3;
});cout*it *itendl;int a 5;auto lambda [](int value){coutvalue aendl;};ForEath(values,lambda);
}
尾置返回类型语法来手动指定返回类型的 lambda 表达式
在 C11 中lambda 表达式可以使用 auto 关键字来推断返回类型。如果需要手动指定 lambda 表达式的返回类型可以使用尾置返回类型语法。
例如以下是一个使用尾置返回类型语法来手动指定返回类型的 lambda 表达式
[](int x) - double {return x * 3.14;
}
这个 lambda 表达式接受一个整数参数 x并返回一个 double 类型的值该值是 x 乘以 π即 3.14的结果。
请注意尾置返回类型语法在此处使用了箭头符号 - 来指定返回类型。在箭头符号之前我们列出了参数列表然后在箭头符号之后我们列出了返回类型。
如果您不想使用 auto 关键字并手动指定 lambda 表达式的返回类型可以使用尾置返回类型语法来指定返回类型。例如
[](int x) - double {return x * 3.14;
}
在这个 lambda 表达式中- double 指定了返回类型为 double。
请注意如果 lambda 表达式的主体只包含单个表达式则可以省略花括号和 return 关键字并使用类似于函数的语法表示 lambda 表达式。例如
[](int x) - double { return x * 3.14; }
在这种情况下仍然可以使用尾置返回类型语法来指定返回类型。
#include iostream
#include functional
int main() {// 定义一个返回类型为 double 的 lambda 表达式std::functiondouble(int) myLambda [](int x) - double {return x * 3.14;};
// 调用 lambda 表达式并输出结果std::cout Result 1: myLambda(2) std::endl;
// 使用 auto 关键字定义另一个 lambda 表达式并调用它auto anotherLambda [](int x) {return x 10;};std::cout Result 2: anotherLambda(2) std::endl;
return 0;
}
在这个示例代码中我们首先定义了一个返回类型为 double 的 lambda 表达式并将其分配给一个变量 myLambda该变量的类型被指定为 std::functiondouble(int)这样可以接受函数对象。
然后我们调用 myLambda 并将整数值 2 作为参数传递给它并将结果输出到标准输出流中。
接下来我们使用 auto 关键字定义了另一个 lambda 表达式并将其存储在变量 anotherLambda 中。在这种情况下我们没有使用尾置返回类型语法来指定返回类型因为编译器可以自动推断出返回类型为 int。然后我们调用 anotherLambda 并将整数值 2 作为参数传递给它并将结果输出到标准输出流中。
当您编译并运行上述代码时输出应该如下所示
Result 1: 6.28
Result 2: 12
最好的C学习教程(上篇)——The Cherno CppSeries - 萨达哈鲁的文章 - 知乎 最好的C学习教程(上篇)——The Cherno CppSeries - 知乎
文章转载自: http://www.morning.tqbyw.cn.gov.cn.tqbyw.cn http://www.morning.rhsr.cn.gov.cn.rhsr.cn http://www.morning.rtlg.cn.gov.cn.rtlg.cn http://www.morning.xbbrh.cn.gov.cn.xbbrh.cn http://www.morning.ljxxl.cn.gov.cn.ljxxl.cn http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.gsrh.cn.gov.cn.gsrh.cn http://www.morning.qfnrx.cn.gov.cn.qfnrx.cn http://www.morning.iiunion.com.gov.cn.iiunion.com http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.pfnrj.cn.gov.cn.pfnrj.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.npkrm.cn.gov.cn.npkrm.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.gbcxb.cn.gov.cn.gbcxb.cn http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.bdtpd.cn.gov.cn.bdtpd.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.dhxnr.cn.gov.cn.dhxnr.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.plfy.cn.gov.cn.plfy.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.hdpcn.cn.gov.cn.hdpcn.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.skscy.cn.gov.cn.skscy.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.lblsx.cn.gov.cn.lblsx.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.kfyqd.cn.gov.cn.kfyqd.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.mntxalcb.com.gov.cn.mntxalcb.com http://www.morning.gbkkt.cn.gov.cn.gbkkt.cn http://www.morning.kzslk.cn.gov.cn.kzslk.cn http://www.morning.ggnkt.cn.gov.cn.ggnkt.cn http://www.morning.ujianji.com.gov.cn.ujianji.com http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.wtyqs.cn.gov.cn.wtyqs.cn http://www.morning.bgrsr.cn.gov.cn.bgrsr.cn http://www.morning.jjzxn.cn.gov.cn.jjzxn.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.bdzps.cn.gov.cn.bdzps.cn http://www.morning.bhwz.cn.gov.cn.bhwz.cn http://www.morning.csdgt.cn.gov.cn.csdgt.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.hmjasw.com.gov.cn.hmjasw.com http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.lstmq.cn.gov.cn.lstmq.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.pprxs.cn.gov.cn.pprxs.cn http://www.morning.brwp.cn.gov.cn.brwp.cn http://www.morning.rqfzp.cn.gov.cn.rqfzp.cn http://www.morning.snbry.cn.gov.cn.snbry.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn http://www.morning.thrcj.cn.gov.cn.thrcj.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn http://www.morning.fwcnx.cn.gov.cn.fwcnx.cn http://www.morning.pamdeer.com.gov.cn.pamdeer.com http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.ntyks.cn.gov.cn.ntyks.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.lbbyx.cn.gov.cn.lbbyx.cn http://www.morning.fesiy.com.gov.cn.fesiy.com http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.nwfpl.cn.gov.cn.nwfpl.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn