Lambda表达式
2024-05-15
1
0
1.什么是Lambda表达式
名称Lanbda来自landba caculus(λ演算)—一种定义和应用函数的数学系统。这个系统能让您使用匿名函数—即无需给函数命名。在C++11中,对于接受函数指针或函数符的的函数,可使用匿名函数定义(lambda)作为其参数。与前述函数f3对应的lambda如下:
bool f3(int x){return x%3==0;}(计算是否被3整除)
对应lambda表达式:
[](int x){return x%3==0;}
差别有两个:使用[]替代了函数名(这就是匿名函数的由来);没有声明返回类型。返回类型相当于使用decltyp根据返回值推断得到,这里为bool.如果lambda不包含返回语句,推断出返回类型将为void.就这个示例而言,你讲以如下方式使用该lambda:
std::vector<int> numbers(1000);
count3=std::count_if(numbers.begin(),numbers.end(),[](int x ){return x% 3==0;})
(count_if()的前两个参数对应指定区间,二第三个参数影视一个返回true或false的函数对象。函数count_if()返回为true的次数)
也就是说,使用整个lambda表达式替换函数指针或函数符构造函数。
仅当lambda表达式完全由一条返回语句组成时,自动类型腿短才管用:否则,需要使用新增的返回类型后置语法:
[](double x)->double(int y=x;return x-y;)//返回类型为double
2.为什么使用Lanbda表达式