本專欄介紹
我的STL專欄,將分爲三個模塊。
- "走近STL"系列文章,講的是STL的基礎,主要是針對STL的常用容器Vector、List和Map快速上手,包括在使用過程中會遇到坑。我的目標是讓初接觸STL的朋友能快速上手。
- “走進STL”系列文章,講的是STL的深入部分,主要涉及STL的內存分配、容器源碼分析、算法源碼分析等六大塊。(哪六大塊?下面會講到)。這個系列主要是針對想要深入學習STL或者想學習一下STL的編碼技法(traits編碼技法)的朋友。多學習源碼的好處是顯而易見的。
- “擁抱STL”系列文章,這個模塊裏面講的是對“走進STL”模塊學習的C++其他技術支持,畢竟沒有一定的C++基礎的話,直接看源碼剖析是很痛苦的。
STL的前世今生
STL,雖然是一套程序庫,但卻不僅僅是一套一般印象中的程序庫,而是一個具有劃時代意義的、有着深厚理論基礎的發明。
說是軟件組件史上的一大突破,也當之無愧。
爲了建立數據結構與算法的一套標準,降低其間的耦合關係,以及提升各自的交互性、彈性、獨立性,C++社羣中誕生了STL.
STL是一個開源項目,所以有很多個版本。在我的這個專欄中使用SGI STL版本,不論是符號命名,還是編碼風格上,這個版本的可讀性非常高。
STL可不止有容器
對於大部分接觸過STL的人來說,對於STL的印象應該是極好的,不過大部分人可能也是簡單的將容器和STL的全部畫起了等號,最多再加上算法,畢竟我們使用STL常用到的也就那兩套頭文件。說實話我也前也是這麼認爲的。
其實STL提供了六大組件,容器和算法只是其中一部分,它們分別是:
容器、算法、迭代器、仿函數、配接器、配置器。
這些組件都是什麼?
不要急,就算知道也再看一遍吧。
-
容器
-
各種數據結構,如Vector、List、Map,用於存放數據。
-
算法
-
各種常見算法如:排序、增刪查等。從實現來看,STL算法屬於泛型函數。
-
迭代器
-
很驚奇,迭代器不屬於容器,也不屬於算法。
-
扮演起容器與算法之間的“粘合劑”,是“泛型指針”。
-
原生指針可以作爲一種迭代器,不過迭代器一般是以智能指針的形式存在的。
-
仿真函數
-
行爲類似函數,從實現來看是一種重載了operator()的類或模板類。
-
函數指針可視爲狹義上的仿真函數。
-
配接器
-
說來話長,一種用於修飾容器、迭代器、仿真函數的東西。
-
配置器
-
空間配置與管理,如果要深入瞭解STL代碼,則這一塊將會是奠基石一般的存在。
來看一下STL六大組件聯合工作的圖示:
STL深入學習書籍推薦
如果是爲了應用的話呢,看我的“走近STL”系列就好了,我是個力求精簡且有趣的人,博客也不會太冗長。
如果想深入瞭解STL,可以看我的“走進STL”系列和“擁抱STL”。
如果一定要自己看書且有一定的功底,推薦《STL源碼剖析》
在網上找的基本是繁體版本,這套是簡體帶目錄,畫質也不錯。