当前位置: 首页 > news >正文

win2003 iis做网站广西最新消息今天公布

win2003 iis做网站,广西最新消息今天公布,专业佛山网站建设,网站收录下降原因文章首发公众号:iDoitnow 为什么引入Lambda Lambda表达式是一个可以内联在我们代码中的函数,我们可以将他传递给另外一个函数。在没有引入Lambda表达式之前,当我们遇到需要对多个数据,按照同一规则进行操作的时候,创建…

文章首发公众号:iDoitnow

为什么引入Lambda

Lambda表达式是一个可以内联在我们代码中的函数,我们可以将他传递给另外一个函数。在没有引入Lambda表达式之前,当我们遇到需要对多个数据,按照同一规则进行操作的时候,创建机动函数会更简单,但是必须在其他地方定义好该函数,然后再使用它,有时候两者之间可能距离离的很远,想要了解该函数内部操作的原理,需要翻阅多页源代码找它的定义,这样使得代码的可读性大打折扣。这就是Lambda表达式出现的主要原因。

基本的Lambda语法

lambda表达式是一个匿名函数。其可以捕获作用域中的变量。其在C++11中常用的语法如下:

[captures](params){body}
[captures]{body}  //省略了形参列表,函数不接收实参,如同形参列表为()
[captures](params)->return-type{body}  //return-type为返回类型//eg:
//捕获列表     参数列表           函数体[ ]   (int a, int b)  { return a < b;}
//捕获列表     参数列表      返回类型          函数体[ ]   (double x)  -> double   {int y = x; return x - y;}
/*注:Lambda函数没有声明返回类型,其返回类型相当于使用decltyp根据返回值推断得到的。如果函数体内不包含返回语句,则推断出返回类型为void。但是仅当函数体完全由一条返回语句组成时,自动类型推断才管用否则,需要使用新增的返回类型后置语法*/

:Lambda表达式自动推断返回值类型:有些编译器,像GCC,即使你有多于一个返回语句也不可以自动推断成功,但标准不保证这一点,因此为了防止意外的发生,当函数体内返回语句不止一条的时候,建议使用返回类型后置语法】

其中captures为捕获,它一个包含0个或者多个捕获符的用逗号分隔的列表。params为参数列表,body为函数体。默认的捕获符只有:

  • &:采用引用隐式捕获的方式使用自动变量

  • =:采用复制隐式捕获的方式使用自动变量

    []        // 默认不捕获
    [&]       // 默认以引用捕获(意味着在函数体内可以按照引用的方式使用Lambda表达式所在范围内所有可见的局部变量)
    [&, i]    // 以引用捕获(同上),但i以值捕获
    [=]       // 默认以复制捕获(意味着在函数体内可以按照值传递的方式使用Lambda表达式所在范围内所有可见的局部变量)
    [=, &i]   // 以复制捕获(同上),但 i 以引用捕获
    

下面我们通过C++ Primer Plus中的一个例子进一步理解Lambda表达式:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
const long Size = 390000L;
int main()
{using std::cout;std::vector<int> numbers(Size);std::srand(std::time(0));std::generate(numbers.begin(), numbers.end(), std::rand);cout << "Sample size = " << Size << '\n';// using lambdasint count3 = std::count_if(numbers.begin(), numbers.end(),[](int x){return x % 3 == 0;});cout << "Count of numbers divisible by 3: " << count3 << '\n';int count13 = 0;std::for_each(numbers.begin(), numbers.end(),[&count13](int x){count13 += x % 13 == 0;});cout << "Count of numbers divisible by 13: " << count13 << '\n';// using a single lambdacount3 = count13 = 0;std::for_each(numbers.begin(), numbers.end(),[&](int x){count3 += x % 3 == 0; count13 += x % 13 == 0;});cout << "Count of numbers divisible by 3: " << count3 << '\n';cout << "Count of numbers divisible by 13: " << count13 << '\n';return 0;
}

程序输出结果:

Sample size = 390000
Count of numbers divisible by 3: 130274
Count of numbers divisible by 13: 30009
Count of numbers divisible by 3: 130274
Count of numbers divisible by 13: 30009

Lambda与STL的结合

当STL中的算法(algorithms)库遇到Lambda的时候,会碰出什么样的火花呢?毋庸置疑,这极大的提高我们的编程效率,更提高了代码的整洁性和可读性,例如:

vector<int> v;
v.push_back(1);
v.push_back(2);
//不使用Lambda表达式
for ( auto itr = v.begin(); itr != v.end(); itr++ )
{cout << *itr;
}//使用Lambda表达式
for_each( v.begin(), v.end(), [] (int val){cout << val;} );

正如上面的例子,使用Lambda表达式后,代码显的更漂亮,而且它的可读性也很强,结构更紧凑。

总结

Lambda 引入,使我们在某些情况下,能够将类似于函数的表达式用作接受函数指针或函数符的函数的参数。它更像胶水代码,允许我们将简单的处理逻辑传递到需要的位置,提高开发效率,使得代码结构简洁而且易于理解。

参考文献

C++ Primer Plus(第六版) - 第18章 探讨C++新标准
C++ 参考手册

http://www.yayakq.cn/news/71149/

相关文章:

  • 网站建设回访广东建设项目备案公示网站
  • 济南网站建设公司哪家好代码如诗 wordpress
  • 广东建设业协会网站英铭科技做网站和设计制作更专业
  • 开发微信小程序需要什么软件做优化排名会不会影响网站速度
  • 网站建站多少钱医疗器械公司简介
  • 怎么在网上做装修网站5个网站建设
  • react.js 做网站好吗photoshop破解版下载免费中文版
  • 网站的动态文字是怎么做的做网站推广链接该怎么做
  • 网站后台地址破解100件创意产品
  • 天津百度网站快速优化十堰网站搜索优化价格
  • 做网站常用工具无锡营销型网站建设
  • app网站开发招聘做金融资讯用什么网站程序
  • 青岛做外贸网站的公司简介开淘宝网店
  • 厦门网站j建设长沙网站seo公司
  • 广告设计素材免费的网站qq网站直接登录
  • 免费自己制作网站方法品牌建设是什么意思
  • 宿州市住房 建设 官方网站提供网站制作公司哪家专业
  • seo优化网站多少钱建设电影网站数据库脚本
  • 做网站的把网站写成一行广元市城乡规划建设监察大队网站
  • 百度云wordpress怎么搭建网站网站有什么组成
  • 深圳网站关键词排名优化优秀企业门户网站建设
  • 邢台在百度上做个网站闵行网站建设公司
  • 那个平台能免费做网站昆明网站制作内容
  • 企业的网站建设需要做什么黑龙江网站设计
  • 企业网站软件下载网络营销中自建网站
  • 上海市住房和城乡建设厅网站首页网站建站策划
  • 一个网站设计的费用品牌名字大全
  • 手机上网站网站开发顶岗报告
  • 六安网站制作哪里有岳阳网格员
  • 深圳罗湖企业网站优化wordpress怎么切换成中文的