http://www.cnblogs.com/pugang/archive/2012/02/10/2345942.html
春节期间一次用手机上网无意间发现了这本书,说起来还得感谢智能手机的发展,有时候还是很方便的。当时随便的翻了几页,于是我停不下来了,因为我发现原来我不知道的东西太多了。
我第一次接触STL的时候大约在7年前,那个时候刚从C语言转到C++,记得那个时候知道了STL 的vector, list, map, 但是只是把这些东西当作C++的语法,一带而过,用的时候查查文档,只要逻辑和结果对了就OK,到处是for循环,到处是迭代器,现在回想起来的感触是:… 没文化,真可怕。
第二次我想深入学习STL的时候是研究生毕业以后,记得那个时候刚入行,公司的产品出现了一个问题,是关于STL 的一个容器的erase() 方法调用问题,自己搞了半天才看懂,原来这一个特殊的情况下,这种用法有问题。为了扫清这类问题,我决定深入的学习一下STL。当时找到了一本侯捷翻译的《STL 源码剖析》,说实话,这本书写的真不错,但是他写的有点枯燥,迭代器,分配器… 你没点坚定的毅力说不定就败给他了,我花了一个月的时间(下班后) 才啃完这本书,不敢说100% 扫平,80%还是有的,但是当我读完的时候,我发现这并不是我想要的,我虽然理解了作者要表达的东西,读懂了分配器,迭代器的原理,但是在我的工作中用到的地方并不多。
第三次,也就是这次,当我看到《Effective STL》的时候,我的感触是相见恨晚,做C++开发要是不知道这些东西,显然不够格。其实每种技术都有他自己的特点,都有他自己的取舍,你如果想使用STL就要按照他的方式来玩,我们平时的主官感觉对STL来说并不一定都适用。什么时候用什么容器,什么时候用什么迭代器,什么时候用什么算法,什么时候不该用循环,这本书都做了解答,可以不夸张的说,这本书看过了才能说自己会用STL了。
当然我们要承认,这个世界是有高人的,如果您能正确的回答我下面的几个问题,那估计您不需要读了。
1. STL 标准序列容器和关联容器都是什么?有什么区别?非标准的呢?
2. STL 迭代器有几种都有什么区别?
3. 在什么情况下用什么容器?
4. 什么情况下vector可以比map效率高?
5. 如何写一个自己的内存分配器?
6. 如何调整vector的内存容量,节省内存?
7. 如何修改multiset的键?
8. 如何写仿函数类?
如果您不用上网查就都知道答案,那么恭喜您,您是STL大牛。
如果您懂超过5个,那么同样恭喜您,您至少算个合格的高级工程师。
如果您对超过一半都不知所措,那您也该考虑充充电了。