1. 容器(constainers) 现成的模版形式的数据结构, 如 vector, deque, set, map... 主要用来存放数据;
2. 算法(algorithms) 我倾向于叫做泛型算法, 常见的有 sort, search, copy, erase... 主要用函数模板实现;
3. 迭代器(iterators) 虽然 C++ 是 C 的超集, 但是一个指针满天飞的 programer 从某种意义上来说不是一个好的 C++er. 迭代器主要扮演容器预算法间的媒介, 所谓的 "泛型指针" 主要有五种类型和其他的衍化. 从实现的角度来看, 迭代器是一种将 operator*, operator->, operator++. operator-- 等指针相关操作予以重载的 class template. 每一个 STL 容器(大佬) 都有自己专属的迭代器(小弟). 另外, 原生指针也是一种迭代器.
4. 仿函数(functors) 行为类似函数又不是函数, 可作为算法的某种策略, 是重载了 operator() 的 clas 或 class template, 一般的函数指针可视为一种仿函数.
5. 配接器(adapters) 我觉得是不是就是适配器? 一种用来修饰容器或仿函数或迭代器接口的东西, 如 queue 和 stack, 这两个看着是容器, 实际只是一种配接器, 因为它们的底层操作完全是 deque 来干活. 组件间的转接器.
6. 配置器(allocators) 宾馆的服务员, 只管开房和清理房间, 不管你在里面做什么. 负责空间的配置与管理, 实际是一个实现了动态空间配置, 空间管理, 空间释放的 class template.
这六大组件的关系是协(xiang)同(ai)合(xiang)作(sha):
Container 通过 Allocator 取得数据储存空间, Algorithm 通过 Iterator 存取 Container 内容, Functor 可以协助 Algorithm 完成不同的策略变化, Adapter 可以修饰套接 Functor. 总结起来如图: