STL 并没有完全遵守 面向对象的思想,而是将操作和对象,分别拆分成 algorithm(算法) 和 container(容器),并通过 iterator(迭代器)将两者有机的”粘连”起来了.
Iterator 毫不夸张的说是整个 STL 的灵魂所在.
- allocator(空间配置器) 为 container 提供了高效的内存空间的申请,释放,管理的方式, 让容器不用为这些琐事操心.
- iterator(迭代器) 将容器和算法巧妙的”粘连”起来了. 萃取器有效的将 class-type iterator 和 raw pointer 有效的区分开来了, 再加上内置的类型,使得我们任意时刻都能够取得相应的迭代器的类型.
- container 中对于提供了大量方便易用的容器供用户使用.
- algorithm 提供了大量现有的算法除了能够通过迭代器对容器操作之外,用户也能够通过直接使用这些算法. (STL 中的 sort 算法使用快排算法,但在分割恶化的情况和区间足够小的情况下又使用了其他的算法,使得算法能够.copy 算法由于被经常性的调用,它的实现方式也极为重要,STL 为不同的情况分别提供了不同的版本,使得这个算法总是能高效的运行……)
- functor 为算法服务的同时,也能够和容器结合起来.
适配器在不影响实现的情况下,将现有的接口转化成其他的接口(算法,容器,迭代器使用)
STL 的源码部分为我们提供了很多惊喜……
更多关于 STL 的源码解析[详见Github 地址] (https://github.com/TBLGSn/SGI-STL.git), 通过”提交记录”你可以知道我的整个学习路径, 此外我还添加了大量的注释来帮助阅读源代码.
书籍推荐两本: 《STL 源码解析》和《STL C++标准库(第2版)》