序
STL 是 Standard Template Library(标准模板库)的缩写。Standard 是指STL是C++标准程序库的一部分,Template是指STL是一套模板,这也是STL最本质的特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。
2. STL六大组件
2.1空间配置器(Memory Allocation)
负责空间配置与管理,本质是实现动态空间配置、空间管理、空间释放的一系列class template。它是容器的底层接口,实际使用STL的用户是看不到Allocation的。
2.2 迭代器(iterators)
迭代器扮演容器与算法之间的胶合剂,可以形象的理解为“泛型指针”。从实现的角度看,迭代器是一种将operator*、operator->、operator++、operator–等指针相关操作进行重载的class template。所有的STL容器都有自己专属的迭代器——是的,只有容器设计者才知道如何遍历自己的元素,原生指针(Native pointer)也是一迭代器。
2.3 容器(containers)
各种数据结构,可以看为存储数据的器皿。
- 序列容器:vector、list、deque、string、array
- 容器适配器:stack、queue(底层实现利用deque)
- 关联容器:map、set、multi-map、multi-set
2.4 算法(algorithms)
STL算法是一种函数模板(function template),各种常见算法如:sort,search,copy,erase...
2.5 仿函数(functors)
函数对象的行为类似函数,但可作为算法的某种策略(policy)。从实现的角度看,函数对象是一种重载了operator()(函数调用操作符)的class或class template。
2.6 适配器(Adapters)
适配器是一种用来修饰容器或函数对象或迭代器的东西。例如,STL 提供queue和stack,虽然他们看似容器,但其实只能算是一种容器适配器,因为他们的底层实现完全借助于deque,所有的操作都由底层deque提供。改变functor/container/iterator的接口者称为functor/container/iterator adaptor。