春節期間一次用手機上網無意間發現了這本書,說起來還得感謝智能手機的發展,有時候還是很方便的。當時隨便的翻了幾頁,於是我停不下來了,因為我發現原來我不知道的東西太多了。
我第一次接觸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個,那么同樣恭喜您,您至少算個合格的高級工程師。
如果您對超過一半都不知所措,那您也該考慮充充電了。