作者有话要说
本文写于阅读和实操STL一段时间之后。之所以选择当前时机学习,是为了先对STL有一个整体了解。如果一个部分一个部分学习STL的六大组件,很难理解其设计的巧妙之处。
因此,笔者仅对每个组件的一部分进行分析,并试图掌握不同组件的关联,试图理解STL设计思想。
结果也不出所料,经过前后代码对比分析,一些STL设计用心豁然开朗。
笔者将通过一个极简板的listSTL来向各位展示STL的设计思想。在理解这些设计思想后,其他的容器、算法等功能的实现,不过是时间的问题。
笔者永远坚定地认为,思想最核心,其他的交给时间。
在listSTL项目中,我们仅将实现如下功能:
(1)一个极简的配置器(不使用内存池)
(2)通用的迭代器(具体的迭代器设计与容器直接相关)
(3)完整的list容器(list的具体迭代器设计、list节点、list容器模板等)
(4)部分算法
需要注意的是:相比前三部分的强耦合,第四部分的设计显得相对独立。
讲到这里,你可能会问:
不是六大组件吗?怎么才四个?实际上,六大组件的最后两个:仿函数和配接器,更多是作为前四个组件的辅助工具。在当前极简listSTL项目中,并不能完全体现其辅助工具的妙处。但我相信,当你理解STL设计理念后,再来攻克这些知识,将轻而易举。
大家使用最多的应该是vector容器,那为何不从大家常用的vector入手,开启这个小项目呢?
vector虽然是我们最常用的容器之一,但由于其内部实现较为简单,从而容易让人忽略迭代器设计的理念。
那为何不选用较为复杂的关联式容器呢?
较为复杂的关联式容器,底层采用红黑树机制,原理较为复杂,这会让我们把精力都浪费在与STL设计核心无关的工作上。虽然我们选用的list容器归属序列容器,不能体现关联式容器特性。但就整个STL设计思想而言,list就足够了。