STL之配接器

adapter:将一个class的接口转换为另一个class的接口。


应用于仿函数,functor adapters,价值在于通过它们直接的绑定,组合,修饰能力,几乎可以无限制地创造出各种可能的表达式。

配接操作包括系结(bind),否定(negate),组合(compose)、以及对一般函数或成员函数的修饰。

例如:不小于12 可以使用greater_equal的仿函数;

            也可以使用not1(bind2nd(less<int>(),12)),即将less<int>()第二个参数系结为12,再加上否定操作

举例如何设计仿函数自己的配接器

template<class Operation1,class Operation2>
class unary_compose 
: public unary_function<typename Operation2::argument_type,typename Operation1::result_type>//typename不是不能放到基类列中吗?
{
protected:
Operation1 op1;
Operation2 op2;
public:
unary_compose(const Operation1& x,const Operation2& y)
:op1(x),op2(y){}
//嵌套从属名称
typename Operation1::result_type 
operator()(const typename Operation2::argument_type& x) const{
return op1(op2(x));
}
};

template<class Operation1,class Operation2>
inline unary_compose<Operation1,Operation2>
compose1(const Operation1& op1,const Operation2& op2)
{
return unary_compose<Operation1,Operation2>(op1,op2);
}

//为什么这个函数在新建的.h文件中就编译不过,报错是语法错误,但是放到xfunctional就可以使用?

函数如何采用配接能力:一元仿函数必须继承unary_function,二元仿函数必须继承自binary_function,成员函数必须以mem_fun处理过,一般函数必须以ptr_fun处理过。

迭代器的配接器:insert iterators,reverse iterators,iostream iterators.
insert iterators: 能够将迭代器的赋值操作转变为插入操作。包括专司尾端的插入操作,专司头端的插入操作,以及可以从任意位置执行插入操作
reverse iterators:方便用在从尾端开始运行的算法上。
iostream iterators:可以将迭代器绑定到某个iostream对象上

迭代器配接器的目的:就是方便算法上加入自己的应用策略。
举例:
int ia[] = {0,1,2,3,4,5}
deque<int> id(ia,ia+6)
copy(ia+1,ia +2,front_inserter(id));  //输出的是1,0,1,2,3,4,5
cout<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值