【STL】 21 函数对象适配器之仿函数适配器 bind1st bind2nd
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;
//预定义函数对象:
//①仿函数适配器 bind1st bind2nd
class MyPrint01{ //一元函数对象
public:
void operator()(int v){
cout<< v<< " ";
}
};
class MyPrint02 : public binary_function<int,int,void>{ //二元函数对象
public:
void operator()(int v,int val) const{
cout<< v + val << " ";
cout<<" v = "<<v<<" val = "<<val<<endl;
}
};
void test01(){
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
}
//for_each()第三个参数必须为 一元函数对象 !
for_each(v.begin(),v.end(),MyPrint01());
cout<<endl;
//但实际情况是我们需要在 for_each()中使用一个 二元函数对象
//因此需要 绑定仿函数适配器
int addNum = 100;
for_each(v.begin(),v.end(),bind2nd(MyPrint02(),addNum)); //每一次输出的值都加上一个固定值num
cout<<endl;
for_each(v.begin(),v.end(),bind1st(MyPrint02(),addNum)); //每一次输出的值都加上一个固定值num
cout<<endl;
//绑定适配器:将一个二元函数对象转变成一元函数对象
// bind1st: 将addNum绑定为函数对象的第一个参数
// bind2nd: 将addNum绑定为函数对象的第二个参数
}
int main(){
test01();
return 0;
}