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

全国免费发布信息网站大全网络系统管理比赛内容

全国免费发布信息网站大全,网络系统管理比赛内容,全网推广怎么做,网站开发 h5lambda lambda的介绍lambda的使用lambda的细节->捕捉列表 lambda的介绍 lambda是匿名函数,再适合的场景去使用可以提高代码的可读性。 场景: 假设有一个Goods类需要进行按照价格、数量排序 class Goods {string name;size_t _price;//价格int num;/…

lambda

    • lambda的介绍
    • lambda的使用
    • lambda的细节->捕捉列表

lambda的介绍

lambda是匿名函数,再适合的场景去使用可以提高代码的可读性。
场景:
假设有一个Goods类需要进行按照价格、数量排序

class Goods
{string name;size_t _price;//价格int num;//数量
};

要是对一个类进行排序可以使用库函数sort(),但是sort()的最后一个参数是决定按照哪个成员排序,以及是排升序还是排降序的,所以最后一个参数就需要写成仿函数,假设用价格排升序:

struct ComparePriceGreater
{bool operator()(Goods& g1,Goods& g2){return g1.price>g2.prices;}
};
//然后再传仿函数
sort(容器.begin(),容器.end(),ComparePriceGreater())

这样排列组合就需要写四个仿函数那这样就会减低代码的可读性,如果使用lambda就可以减少代码量,加强代码的可读性。

sort(容器.begin(),容器.end(),[](const Goods& g1, const Goods& g2)
{return g1.price>g2.price };)

lambda的使用

lambdad的组成部分:capture-listmutable->return-type{statement}
[capture-list]:叫做补做列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。
(parameters):叫做参数列表,和函数的参数列表是一样的,没有参数的时候可以省略
mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)。
->return-type:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可以省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推导。
{statement}:函数主体,在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量。

int main()
{auto add = [](int a)mutable->int {return ++a; };cout << add(1) << endl;return 0;
}

需要注意:函数体写完之后要加上;

lambda的细节->捕捉列表

[]捕捉列表可以捕捉程序上下文中的变量给函数体使用,是值传递还是应用传递。
[var]:值传递捕捉var
[=]:值传递捕捉此作用域中的所有变量
[&var]:引用传递捕捉var
[&]:引用传递捕捉此作用域中的全部变量
[this]:值传递捕捉this指针
注意点:

  • 捕捉传递可以是多个捕捉项,如:[=,&a,&b]
  • 不能重复传递捕捉同一个变量,如:[=,a]
  • lambda是一个匿名函数,要用auto来接收,或者function和bind包装器
  • lambda若是全局的,捕捉列表一定要为空
  • 两个相同的lambda不可以赋值
  • lambda只可以捕捉本作用域的局部变量,捕捉全局和非此作用域的变量会报错

例子: 写一个交换两个数的lambda

int main()
{int a = 1;int b = 2;auto Swap = [=]() mutable{int tmp = a;a = b;b = tmp;};Swap();cout << a << " " << b << endl;return 0;
}

在这里插入图片描述

这里是=捕捉属于值传递给函数体,说明实际是交换不了a和b的,mutable,是为了解除捕捉过来的a,b的const属性。

int a = 1;
int b = 2;
auto Swap = [&]() mutable{int tmp = a;a = b;b = tmp;};
Swap();
cout << a << " " << b << endl;
return 0;

在这里插入图片描述
这里是&捕捉给函数体使用是引用传递,可以交换a,b的值,这里可以不加mutable,因为引用类似于指针,初始是不带const属性的。

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

相关文章:

  • 天猫商城网站设计分析网络优化包括
  • 什么网站比较吸引流量常熟经济开发区人才网
  • 承德做网站网站的工商网监怎么做进去
  • 百度网站收录删除wordpress固定连接出错
  • 衡水做外贸网站建设开锁行业在58做网站有活吗
  • 做网站应该用什么配置的电脑北京家装公司十大排名
  • 优惠做网站工商注册登记系统官网
  • 自己电脑做网站要下载asp网站开发平台
  • 域名注册后怎么建立自己的网站做网站怎样投放广告
  • 分类信息的网站如何推广品牌建设不足怎么表达
  • 做网站php邵阳县网站建设公司沙河网站建设公司
  • 名表网站拖曳式网站建设
  • 广州建设执业注册中心网站网站建设绩效考核方案
  • 二级网站建设检查评比方案下载班级优化大师
  • 温州快速网站推广公司站长之家网站介绍
  • 万宁市住房和城乡建设厅网站淮北哪有做淘宝网站
  • 做博客网站怎么赚钱吗做电商网站的公司
  • 外国优秀设计网站推荐大理市住房和城乡建设局网站
  • 装修门户网站程序 cms企业微信app下载安装官网电脑版
  • 网站如何提交百度收录com域名免费
  • 制作单网页网站贵阳中企动力做的网站
  • 辉县网站建设做seo网站图片怎么优化
  • 怎么用自己电脑做网站服务器西安网络运营公司有哪些
  • 学做电影网站网站如何做问卷调查
  • 哪里建设网站好企业管理培训课程图片
  • 合肥网达软件有限公司怀柔网站整站优化公司
  • 写作墨问题 网站注册公司多少钱流程及费用
  • 网站 数据库 sql 导入网站上传在空间哪里
  • 网站建设维护员是做什么的WordPress插件集成在主题
  • 注册公司登录什么网站wordpress5.1.1版本