SGI-STL简记(十一)-适配器(容器、迭代器、仿函数)

适配器(adapters):

    概念上类似于设计模式中的适配,此处STL中的适配器可对组件的组合、灵活运用扮演重要角色。
    STL中适配器主要有:容器适配器、迭代器适配器、仿函数适配器
    
容器适配器:
    
    queue(先进先出)、stack(先进后出)、priority_queue(优先队列)适配器,即queue和stack的_Sequence序列模板参数默认类型为deque<T>(双端队列),
    当然也可以是其他满足适配器的必要接口的容器也可,故这几个可认为是序列模板容器_Sequence的包装器。

迭代器适配器:
    
    insert iterator 插入迭代器(通过重载operator=,即赋值的方式来插入元素),主要有以下几个包装迭代器:
        back_insert_iterator(调用容器的push_back插入);
        front_insert_iterator(调用容器的push_front插入);
        insert_iterator(调用容器的insert在指定迭代器位置后插入);
        
        对应生成以上三种迭代器的便利函数:back_inserter、front_insert、inserter;
    
    reverse iterator 逆转迭代器(即将原本operator++变为后退操作,operator--变为前进操作)
        reverse_iterator逆转迭代器类,提供了基本的逆转迭代操作(内部引用包含了一个iterator迭代器,即可认为逆转迭代器包装了容器迭代器);
        此外部分容器的rbegin()、rend()可分别返回含尾部迭代器、首部迭代器位置的逆转迭代器。
    
    iostream iterator IO流迭代器(绑定iostream对象到迭代器上,操作迭代器时可方便地操作数据流对象)
        本质上,IO流迭代器内部维护一个stream流对象,当对迭代器对象执行输入或输出操作时,即转接调用到stream流对象上的操作。
        istream_iterator包装istream对象;ostream_iterator包装ostream对象。
    

仿函数适配器:
    
    可以实现无限次适配(包装)(也即可用仿函数包装仿函数),通过绑定、组合和修饰,可以实现各种复杂的表达式。
    此外,一个可适配的对象,应是可适配的,也即是一元仿函数需继承unary_function、二元仿函数需继承自binary_function,
    而对成员函数则应以mem_fun包装处理,一般函数应以ptr_fun包装处理。也就是说,若是可适配的,则可实现无限包装。
    
    常见的仿函数适配器:
        bind1st、bind2nd、not1、not2、compose1、compose2、ptr_fun、mem_fun、mem_fun_ref、mem_fun1、mem_fun1_ref等。
    

猜你喜欢

转载自www.cnblogs.com/haomiao/p/11666283.html
今日推荐