许多编程语言提供了匿名函数,Lambda表达式是与匿名函数有关的编程方法。匿名函数就是一个只有函数实体,而没有函数名字的函数。Lambda表达式隐式的定义了一个函数对象类(有关函数对象简介),并且构造了一个该类的对象。可以把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表达式运行结果一样。