zoukankan      html  css  js  c++  java
  • 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等。
  • 相关阅读:
    ajax方式提交表单数据并判断当前注册用户是否存在
    Javaweb实现对mongodb的增删改查(附带源代码)
    Navicat导入sql server数据库
    教师信息管理系统(方式一:数据库为oracle数据库;方式二:存储在文件中)
    八中常用的算法设计
    物体高亮与半透明
    unity发布ios高通AR的问题
    UITabView
    iOS Undefined ..Arm64问题解决
    unityweb Request请求
  • 原文地址:https://www.cnblogs.com/haomiao/p/11666283.html
Copyright © 2011-2022 走看看