一、STL的六大组件

  • 容器(containers):
    • 各种数据结构,如vector, list, deque, set,map,用来存放数据
    • 从实作的角度看,STL 容器是一种class template。就体积而言,这一部份很像冰山在海面下的比率
  • 算法(algorithms):
    • 各种常用算法如sort,search,copy,erase…
    • 从实作的角度看,STL算法是一种function template
  • 迭代器(iterators):
    • ​​​​​​​扮演容器与算法之间的胶着剂,是所谓的“泛型指标”。共有五种类型,以及其他衍生变化。
    • 从实作的角度看, 迭代器是一种将 operator*, operator->, operator++, operator--等指标相关操作予以多载化的class template。所有STL容器都附带有自己专属的迭代器——是的,只有容器设计者才知道如何遍历自己的元素。原生指标(native pointer)也是一种迭代器。
  • 仿函式(functors):
    • ​​​​​​​行为类似函式,可做为算法的某种策略(policy)
    • 从实作的角度看,仿函式是一种重载了operator()的class或class template。一般函式指标可视为狭义的仿函式
  • 配接器(adapters):
    • ​​​​​​​一种用来修饰容器(containers)或仿函式(functors) 或迭代器(iterators)接口的东西
    • 例如STL提供的queue和stack,虽然看似容器,其实只能算是一种容器配接器,因为它们的底部完 全借重 deque,所有动作都由底层的 deque 供应。改变functor接口者,称 为function adapter,改变 container 接口者,称为 container adapter,改变 iterator 接口者,称为 iterator adapter
  • 配置器(allocators):
    • ​​​​​​​负责空间配置与管理
    • 从实作的角度 看, 配置器是一个实现了动态空间配置、空间管理、空间释放的 class template。

二、六大组件的交互关系

C++(STL源码):03---STL的六大组件(容器、算法、迭代器、仿函数、配接器、配置器)

相关文章: