STL源码剖析--概述

来源:互联网 发布:c语言 函数式编程 编辑:程序博客网 时间:2024/05/20 17:41

学习教程


凝霜–对STL源代码加了详细的注释–但是看着不方便,一篇博文只讲一个文件

C++ STL源码剖析–对凝霜的详细索引,一篇博客存储了所有的文件

侯捷的网站

Github的STL索引

c++泛型编程编译器支持检测–代码对应书中1.8~1.9节

概述STL源码剖析-侯捷


C++标准链接库中隶属 STL 范围者,粗估当在 80%以上。对软件开发而言,STL 是尖?利兵,可以节省你许多时间。

对编程技术而言,STL 是金柜石室—所有与编程工作最有直接密切关联的一些最被广泛运用的数据结构和算法,STL都有实作,并符合最佳(或极佳)效率。

不仅如此,STL 的设计思维,把我们提升到另一个思想高点,在那里,对象的耦合性(coupling)极低,复用性(reusability)极高,各种组件可以独立设计又可以灵活无罅地结合在一起。

STL 六大组件功能与运用


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。

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

这里写图片描述

STL文件分布与简介


  • C++标准规范下的 C 头文件(无扩展名),例如cstdio, cstdlib, cstring

  • C++标准链接库中不属于 STL范畴者,例如 stream, string…相关文件。

  • STL标准头文件(无扩展名),例如vector, deque, list, map, algorithm, functional…

  • C++ Standard 定案前,HP 所规范的 STL 头文件,例如vector.h, deque.h, list.h, map.h, algo.h, function.h…

  • STL 内部文件(STL 真正实作于此),例如stl_vector.h, stl_deque.h, stl_list.h, stl_map.h, stl_algo.h, stl_function.h…

1 0
原创粉丝点击