#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
using namespace std::placeholders;
void f(int arg1,int arg2)
{
if(arg1>arg2)
{
cout<<arg1<<endl;
}
}
int main()
{
vector<int> cols{1,2,3,4};
int v=2;
for_each(cols.begin(),cols.end(),[=](int n){if(n>v)cout<<n<<endl;});
for_each(cols.begin(),cols.end(),bind(f,_1,v));
return 0;
}
以上一个基本的示例。
先来看第一个lambda表达式:
for_each(cols.begin(),cols.end(),[=](int n){if(n>v)cout<<n<<endl;});
lambda本质上是匿名函数。[=]代表捕获变量。在本例中捕获了变量v。然后将其传入匿名函数。
下面来看bind。
在C++98/03中有binder1st和bind2end。在C++11中这两个函数被废弃了。换为了更易用的bind。
for_each(cols.begin(),cols.end(),bind(f,_1,v));
bind的参数第一个是函数f,第二个是一个占位符。代表f的第一个参数。第三个参数代表传入变量v。