服务器做ssr后还可以做网站吗,上海浦东新区做网站,做网站公司宁波上市,WordPress微信SVG图标Halo#xff0c;这里是Ppeua。平时主要更新C#xff0c;数据结构算法#xff0c;Linux与ROS…感兴趣就关注我bua#xff01; 文章目录 0. Lambda表达式简介1. Lambda表达式2. Lambda表达式语法 0. Lambda表达式简介
在C98及之前,想要对sort进行自定义排序,或者对自定义类… Halo这里是Ppeua。平时主要更新C数据结构算法Linux与ROS…感兴趣就关注我bua 文章目录 0. Lambda表达式简介1. Lambda表达式2. Lambda表达式语法 0. Lambda表达式简介
在C98及之前,想要对sort进行自定义排序,或者对自定义类型进行排序需要写一个仿函数。
例如想要从大到小对num进行排序需要这样写
struct Greater{bool operator()(int x,int y){return xy;}
};
int main()
{vectorintnum;sort(num.begin(),num.end(),Greater());
}为了一个可能只在全局中使用一次的函数来创建一个类得不偿失,也有点麻烦.所以引入了Lambda表达式
1. Lambda表达式
在C11,引入了Lambda表达式来解决这个问题,其更像一种匿名函数.生命周期只在当前这一行 继续引用上文排序的例子,现在可以这样写 int main()
{vectorintnum;sort(num.begin(),num.end(),[](int x,int y){return xy;});
}仅需要一行即可完成该功能,该函数生命周期也仅在这一行.
这个表达式长得十分Python,是从Python那引用过来的特性
2. Lambda表达式语法 Lamda表达式总体框架 [capture-list](parameters)mutable -return-type {{statement}
}statement:为函数体,正常写函数即可 parameters:为参数列表 mutable:可取消参数列表的常量属性 return-type:return-type可由编译器自动推导可省略 capture-list:参数捕获列表,可以理解为接下来可以在函数中使用哪些已有的变量 [var]表示复制某一个变量的值[var]表示引用某一个变量[]复制所有变量[]引用所有变量[this]引用this指针 这些可以进行一个组合,表示复制所有全局变量,仅引用a与b,不可重复引用 [,a,b](){}
重复引用
[,a,b](){}一个引用了全局变量的例子 int a0,b1;
auto f1[,a]()mutable{
a,b;
};
f1();
couta b;这里的结果为0,1.加上mutable是为了解决a为const的限制,即可对a进行自增的操作. Lambda表达式之间不可以互相赋值,即使看起来类型相同,但其背后的类型是不同的.我们用typeid来查看下 auto f2[](){couthello;return 0;};
auto f1[](){couthi;return 0;};
coutf2: typeid(f2).name()endl;
coutf1: typeid(f1).name();很明显其为不同的函数类型,所以不可以互相赋值 其底层为函数对象(仿函数)实现的,本质上没有什么差别