关于Lambda表达式
许多编程语言提供了匿名函数,Lambda表达式是与匿名函数有关的编程方法。匿名函数就是一个只有函数实体,而没有函数名字的函数。Lambda表达式隐式的定义了一个函数对象类(有关函数对象简介),并且构造了一个该类的对象。可以把Lambda表达式看作是包含状态和可以访问封闭作用域外的变量的匿名函数。
函数对象 VS Lambda表达式
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> vecInt;
for(int i=0;i<10;i++)
vecInt.push_back(i);
int evenCount=0;
for_each(vecInt.begin(),vecInt.end(),[&evenCount](int k){
cout<<k<<" ";
if (k%2==0)
{
cout<<"偶数"<<endl;
evenCount++;
}
else
cout<<"奇数"<<endl;
});
cout<<"偶数有 "<<evenCount<<" 个"<<endl;
}
运行结果:#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class Functor
{
public:
Functor(int &ec):_evenCount(ec){}
public:
void operator()(int n)
{
cout<<n<<" ";
if (n%2==0)
{
cout<<"偶数"<<endl;
_evenCount++;
}
else
cout<<"奇数"<<endl;
}
private:
int &_evenCount;
};
int main()
{
vector<int> vecInt;
for(int i=0;i<10;i++)
vecInt.push_back(i);
int evenCount=0;
for_each(vecInt.begin(),vecInt.end(),Functor(evenCount));
cout<<"偶数有 "<<evenCount<<" 个"<<endl;
}
上面的例子使用函数对象,和例子1中的Lambda表达式运行结果一样。