關於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表達式運行結果一樣。