STL——适配器

1,adapter可以把某些已经存在的东西改造一下,比如把接口改一改,把三个参数的变成两个参数的;把一个函数的名称改一下,adapter通常都是这么使用的。根据adapter改造的东西可以把adapter分为三种,第一种交容器适配器,第二种叫迭代器适配器,第三种叫仿函数适配器。假设a改造B之后,a就代表的B,a就可以供大家使用而不会看到B,但是a所做的事情会交给b去做(两种做法,一种是继承的方法,另一种是a中拥有一个b。STL中都是使用后面一种)。

2,和迭代器的思想差不多,迭代器和其他的部件合作的时候,也是使用问答的方式。仿函数适配器中必须有的三个变量:

     typedef A1 first_argument_type; //第一个参数的类型

     typedef A2 second_argument_type; //第二个参数的类型

     typedef R result_type; //返回值类型

3,queue和stack中都内含一个deque,所以stack和queue属于容器适配器。

4,函数适配器binder2nd:     

   注意:bind2nd把less修饰了一下,本来是x < y,修饰过后,编程了 x < 40。注意,适配器修饰函数,最后的功能也要是一个函数,所以需要重载()。bind2nd只是把函数准备好,当执行count_if函数时,在pred函数中,传入第一个参数x,执行比较,因为value的值和op在适配器中已经记下来了。

   注意: Operation::second_argument_type是Operation利用提问的方式获取第二参数的类型,如果与指定的不对应,就会报错。其他的也是一样的。

  注意:binder2nd为什么要继承unary_function呢?这个主要是考虑到如果binder2nd适配后的函数,还要被适配的情况下,就只需要回答两个问题就可以了,因为一个参数已经被固定了,而unary_function就是用来回答两个问题的。

5,新型适配器bind

     C++11以后开始提供的,std::bind可以绑定函数,函数对象,成员函数,成员数据。

     使用占位符时必须要使用 using namespace std::placeholders,注意占位符的使用。

     注意绑定成员函数的时候,member function其实是有一个参数的,就是this。

6.函数适配器not1

   这里的原理和binder2nd差不多,不再赘述,源代码见下图:

7.迭代器的适配器inserter

  inserter是自己做出一块空间来放数据。

注意:copy函数中的=本来已经写好了,如果对result中对=进行重载后,就会改变=的行为。

8.X适配器ostream_iterator和istream_iterator

   这两个适配器很奇妙,本人功力有限没有听懂。    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值