STL提供六大组件,彼此可以嵌套使用。

1.容器:各种数据结构,比如vector,list,set,map,deque,用来存放数据。从实作的角度看,STL 容器是一种 class template。就体积而言,这一部份很像冰山在海面下的比率。

2.算法:各种算法如sort,search,copy,erase。从实作的角度看,STL 算法是一种 function template。

3.迭代器:扮演容器与算法的焦灼剂。剂,是所谓的「泛型指标」。共有五种类型,以及其它衍生变化。从实作的角度看,迭代器 是㆒种将 operator*, operator->, operator++, operator-- 等指标相 关操作予以多载化的 class template。所有 STL 容器都附带有自己专属的迭 代器 — 是的,只有容器设计者才知道如何巡访自己的元素。原生指标(native pointer)也是㆒种迭代器。

4.仿函式:行为类似函式,可做为算法的某种策略(policy)。从实作的角度看,仿函式是㆒种重载了 operator()的 class 或 class template。㆒般函式指标可视为狭义的仿函式。

5.配接器(adapters):一种用来修饰容器(containers)或仿函式(functors) 或迭代器(iterators)接口的东西。例如 STL 提供的 queue 和 stack,虽然看似容器,其实只能算是一种容器配接器,因为它们的底部完全借重 deque,所有动作都由底层的 deque 供应。改变 functor 接口者,称 为 function adapter,改变 container 接口者,称为 container adapter,改变 iterator 界面者,称为 iterator adapter。

6.配置器(allocators):负责空间配置与管理。从实作的角度看, 配置器是一个实现了动态空间配置、空间管理、空间释放的 class template。

STL 六大组件的交互关系:Container 透过 Allocator 取得数据储存空间,Algorithm 透过 Iterator 存取 Container 内容,Functor 可以协助 Algorithm 完成不同的策略变化,Adapter可以修饰或套接 Functor。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐