-
STL基本概念
?STL(Standard Template Library,標準模板庫),是惠普實驗室開發(fā)的一系列軟件的統 稱。現在主要出現在 c++中,但是在引入 c++之前該技術已經存在很長時間了。
?STL從廣義上分為:容器(container)算法(algorithm)迭代器(iterator),容器和算法之間通過迭代器進行無縫連接摄狱。STL幾乎所有的代碼都采用了模板類或者模板函數,這相比傳統的由函數和類組成的庫來說提供了更好的代碼重用機會素跺。STL(Standard Template Library)標準模板庫,在我們 c++標準程序庫中隸屬于 STL的占到了 80%以上二蓝。
2.STL六大組件簡介
?STL提供了六大組件,彼此之間可以組合套用指厌。分別是容器刊愚、算法、迭代器踩验、仿函數鸥诽、適配器、空間配置器箕憾。
- 容器:各種數據結構牡借,如vector、list袭异、deque钠龙、set、map等,用來存放數據碴里,從實現角度看沈矿,STL容器是一種class template。
- 算法:各種常用的算法咬腋,如sort羹膳、find、copy根竿、for_each陵像。從實現的角度來看,STL算法是一種 function template寇壳。
- 迭代器:扮演了容器與算法之間的膠合劑醒颖,共有五種類型,從實現的角度來看壳炎,迭代器是一種將 operator*图贸、operator->、operator++冕广、operator--等指針相關操作予以重載的 class templa。所有的STL容器都附帶有自己專屬的迭代器偿洁,只有容器的設計者才直到如何遍歷自己的元素撒汉。原生指針(native pointer)也是一種迭代器。
- 仿函數:行為類似函數涕滋,可作為算法的某種策略睬辐。從實現角度來看,仿函數是一種重載了operator() 的 class 或者 class template宾肺。
- 適配器:一種用來修飾容器或者仿函數或迭代器接口的東西溯饵。
- 空間配置器:負責空間的配置與管理。從實現角度看锨用,配置器是一個實現了動態(tài)空間配置丰刊、空間管理、空間釋放的class tempalte增拥。
?STL六大組件的交互關系啄巧,容器通過空間配置器取得數據存儲空間,算法通過迭代器存儲容器中的內容掌栅,仿函數可以協助算法完成不同的策略的變化秩仆,適配器可以修飾仿函數。
3.STL優(yōu)點
- STL 是 C++的一部分猾封,因此不用額外安裝什么澄耍,它被內建在你的編譯器之內。
- STL 的一個重要特性是將數據和操作分離。數據由容器類別加以管理齐莲,操作則由可定制的算法定義痢站。迭代器在兩者之間充當“粘合劑”,以使算法可以和容器交互運作。
- 程序員可以不用思考 STL 具體的實現過程铅搓,只要能夠熟練使用 STL 就 OK 了瑟押。這樣他們就可以把精力放在程序開發(fā)的別的方面。
- STL 具有高可重用性星掰,高性能多望,高移植性,跨平臺的優(yōu)點氢烘。
** 高可重用性:STL 中幾乎所有的代碼都采用了模板類和模版函數的方式實現怀偷,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。關于模板的知識播玖,已經給大家介紹了椎工。
? 高性能:如 map 可以高效地從十萬條記錄里面查找出指定的記錄,因為 map 是采用紅黑樹的變體實現的蜀踏。
? 高移植性:如在項目 A 上用 STL 編寫的模塊维蒙,可以直接移植到項目 B 上。