作为C 开发者,我认为这本书是必读的(前提是必须知道STL容器的使用方法和常用的算法)。除了有感情地朗读以外,主要要了解以下知识点:
- traits
- allocator原理:比如16个自由链表是怎么回事,是如何向内存池申请内存的,容量不够时是如何扩容的?
- 各个容器的底层原理,这是重点!还要知道,在具体场景下,如何选择哪些容器,可选的多种容器里,各个容器的性能如何?像map和set底层的红黑树的原理,哈希表的原理,deque的原理等等
- 仿函数:这部分篇幅很小,看起来相对轻松
- 迭代器:要结合和容器,理解各种迭代器的底层原理
- 算法:需要知道常用的算法,还需要了解Lambda表达式,因为算法常常结合Lambda一起使用
如果一上来就看书,可能比较吃力,一方面,正如这本书所提及的,需要C 基础。另一方面,stl涉及模板、萃取等C 的"奇淫技巧",还涉及算法的实现,比较复杂。所以我强烈推荐结合侯捷大师的视频:STL与泛型编程(B站竟然没有了。。。),侯捷大师结合源码,入木三分地讲解,令人印象深刻。跟大师学习,思维会提升一个层次!
最后是应用,我推荐两种: 一是自己尝试编码实现一些简单的容器,比如array,list,allocator。这些我也自己尝试过,看似简单,实现起来才发现简单的容器门道也挺多。不过总体来说过程很有趣。据说每个C 程序员都会自己实现一套stl,github上的确有很多个人版本的stl,看来我还不算,哈哈哈
二是leetcode刷题,很多题目都会用到容器,除开最常用的vector,可以针对性的训练比如哈希表、map标签的题目,会加深对stl容器的理解。有的题目甚至考察到了各类容器的性能,比如高频考题LRU的实现。
结合我最近的工作,除开vector,为了查找效率unordered_set和unordered_map我会优先考虑。代码里常常把STL、lambda、算法和C 11/14特性结合在一起。
有时候常常感觉功力还不够,时刻都要学习和实践才行鸭!