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


    适配器(adapters):
    
        概念上类似于设计模式中的适配,此处STL中的适配器可对组件的组合、灵活运用扮演重要角色。
        STL中适配器主要有:容器适配器、迭代器适配器、仿函数适配器
        
    容器适配器:
        
        queue(先进先出)、stack(先进后出)、priority_queue(优先队列)适配器,即queue和stack的_Sequence序列模板参数默认类型为deque<T>(双端队列),
       priority_queue底层则为vector,当然也可以是其他满足适配器的必要接口的容器也可,如:
        用list、vector、deque实现stack,用list、deque实现queue(vector没有提供pop_front),用deque、vector实现priority_queue(list没有提供随机访问迭代器)
       故这几个可认为是序列模板容器_Sequence的包装器。
       此外,这些容器适配器没有提供可随机走访的接口,也没有提供相应的迭代器。
       priority_queue利用max-heap最大堆处理并默认以vector来存储(以完全二叉树形式的堆)(内部使用heap_heap和heap_pop实现堆算法)。 迭代器适配器: 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等。
  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/haomiao/p/11666283.html
Copyright © 2020-2023  润新知