相比于函数,lambda表达式的使用更加直观,在查看某一函数的具体功能实现无需大量翻阅工程代码去找某一函数的具体实现。
lambda 表达式使用方法:
[]() mutable ->return-type{}
[] lambda 可访问作用域内的任何动态变量,要捕获使用的变量,可将其名称放在中括号内,有以下几种方式:。
(1) [Z] 将按照值传递方式访问变量;
(2) [=]将按照值传递方式访问所有变量(包括this);
(3)[&Count]将按照引用方式访问变量;
(4)[&]将按照引用方式访问所有变量(包括this);
(5)[this]表示值传递方式捕捉当前的this指针
()参数选项,与普通函数参数一样,可以为空,如果不需要传递参数可以省略括号。
mutable 修饰符。默认情况下,Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空);
.->return-type 返回类型。可以在不需要返回值的时候也可以连同符号”->”一起省略。并且在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导;
{}:函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有访问的变量。
对比函数指针、函数符、lambda函数 使用实例:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
const long Size1=39L;
const long Size2=100*Size1;
const long Size3=100*Size2;
bool f3(int x){return x%3==0;}
bool f13(int x){return x%13==0;}
int main()
{
using std::cout;
std::vector<int>numbers(Size1);
std::srand(std::time(0));
std::generate(numbers.begin(),numbers.end(),std::rand);
cout<<"Sample size= "<<Size1<<"\n";
int count3=std::count_if(numbers.begin(),numbers.end(),f3);
cout<<"Count of numbers divisible by3 : "<<count3<<endl;
int count13=std::count_if(numbers.begin(),numbers.end(),f13);
cout<<"Count of numbers divisible by3 : "<<count13<<endl;
numbers.resize(Size2);
std::generate(numbers.begin(),numbers.end(),std::rand);
cout<<"Sample size= "<<Size2<<"\n";
class f_mod
{
private:
int div;
public:
f_mod(int d=1):dv(d){}
bool operator()(int x) {return x%div==0;}
};
count3=std::count_if(numbers.begin(),numbers.end(),f_mod(3));
std::cout<<"Count of numbers divisible by 3: " <<count3<<endl;
count13=std::count_if(numbers.begin(),numbers.end(),f_mod(13));
std::cout<<"Count of numbers divisible by 13: " <<count13<<endl;
numbers.resize(Size3);
std::generate(numbers.begin(),numbers.end(),std::rand);
cout<<"Sample size= "<<Size3<<"\n";
count3=std::count_if(numbers.begin(),numbers.end(),[](int x){return x%3==0;})
std::cout<<"Count of numbers divisible by 3: " <<count3<<endl;
count13=std::count_if(numbers.begin(),numbers.end(),[](int x){return x%13==0;})
std::cout<<"Count of numbers divisible by 13: " <<count13<<endl;
return 0;
}