绑定适配器的用途与用法

绑定适配器

用途:将二元的适配对象转变为一元

用法

#include
#include

vectorv;
for(i = 1;i<10;i++)
{
v.push_back(i);
}

struct myprint
{
void operator()(int v,int val)
{
cout << “v:”<< v << “val:” << val << end;
}
}

for_each(v.begin;v.end;myprint());//此时这么写是错误的,因为for_each只能接受一元适配器,myprint中重载的“()”目前有两个参数。

正确写法:
重构上述struct结构体。
struct myprint: public binary_function(int,int,void)//这里写法非常关键,写三种类型 其中前两种类型为适配函数所需要的参数,第三种为函数返回类型。
{
void operator()(int v,int val) const //这个const是必要的!!!!
{
cout << “v:”<< v << “val:” << val << end;
}
}

int dgz = 100;
for_each(v.begin;v.end;bind2nd(myprint(),100//或者写成参数形式,比如dgz));
//这时候把后边的100或者dgz看成适配函数的第二个参数。

如果是
for_each(v.begin;v.end;bind1st(myprint(),100//或者写成参数形式,比如dgz));
//把后边的100或者dgz绑定为函数的第一个参数。

将普通函数转变成函数对象,从而适应for_each的第三个参数变量,目的是为了把函数当成参数用

void myprint(int val,int val2)//两个参数,而放到for_each函数中时必须是一个参数,所以:
{
cout <<“val:”<< val << “val2:” << val2 << endl;
}

for_each(v.begin(),v.end(),bind2nd(str_fun(myprint),1000));//由于myprint是一个2元函数,需要将其变为1元,将第二个参数设置为默认参数。

for_each调用类中的函数方法

class A()
{
public:
A()
{
return a;
}
void show()
{
cout << “age:” <<age<<“height:”<<height<<endl;
}
~A()
{}
};

for_each(v.begin,v.end,mem_fun_ref(&A::show));//这个引用号语法背过~

如果vector中放的是类(比如A),后边使用mem_fun_ref函数。如果vector中放的类指针(A*),后边使用mem_fun函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值