C++——STL


長久以來,軟件界一直希望建立一種可重複利用的東西,以及一種得以製造出”可重複運用的東西”的方法,讓程序員的心血不止於隨時間的遷移,人事異動而煙消雲散,從函數(functions),類別(classes),函數庫(function libraries),類別庫(class libraries)、各種組件,從模塊化設計,到面向對象(object oriented ),爲的就是複用性的提升。
爲了建立數據結構和算法的一套標準,並且降低他們之間的耦合關係,以提升各自的獨立性、彈性、交互操作性(相互合作性,interoperability),誕生了STL

六大組件

STL提供了六大組件,彼此之間可以組合套用,分別是:容器、算法、迭代器、仿函數、適配器、空間配置器。

容器

各種數據結構,如vector、list、deque、set、map等,用來存放數據,從實現角度來看,STL容器是一種class template

算法

各種常用的算法,如sort、find、copy、for_each。從實現的角度來看,STL算法是一種function tempalte

迭代器

扮演了容器和算法之間的膠合劑,共有五種類型,從實現角度來看,operator* , operator-> , operator++,operator–等指針操作予以重載的class tempalte。所有STL容器都附帶有自己的迭代器,只有容器的設計者才知道如何遍歷自己的元素,原生指針也是一種迭代器。

仿函數

行爲類似函數,可作爲算法的某種策略。從實現角度來看,仿函數是一種重載了operator()的class 或者class template

適配器

一種用來修飾容器或者仿函數或迭代器接口的東西

空間配置器

負責空間的配置與管理。從實現角度看,配置器是一個實現了動態空間配置、空間管理、空間釋放的class tempalte

STL六大組件的交互關係,容器通過空間配置器獲得數據存儲空間,算法通過迭代器存儲容器中的內容,仿函數可以協助算法完成不同的策略的變化,適配器可以修飾仿函數

STL的三大組件

容器

研究數據的特定排列方式,以利於搜索或排序或其他特殊目的,這一門學科被我們稱爲數據結構。STL容器就是將運用最廣泛的一些數據結構實現出來
常用的數據結構:數組(array),鏈表(list),tree(樹),棧(stack),隊列(queue),集合(set),映射表(map),根據數據在容器中的排列特性,這些數據分爲序列式容器和關聯式容器兩種
1.序列式容器強調容器的排列順序,序列式容器每個元素都有固定的位置,除非用插入和刪除操作修改位置。Vector容器、Deque容器、List容器等
2.關聯式容器是非線性的樹結構,更準確的說是二叉樹結構。各元素之間沒有嚴格的物理上的順序,也就是說元素在容器中沒有保存元素置入容器時的邏輯順序。關聯式容器的一個重要特點就是在值中選擇一個值作爲關鍵字key,這個關鍵字對值起到索引的作用,方便查找。Set/multiset容器 Map/multimap容器

算法

以有限的步驟解決邏輯或數學上的問題,這門學科被稱爲算法。算法分爲質變算法和非質變算法
1.質變算法:是指運算過程中會改變區間內元素的內容,如拷貝、替換、刪除等
2.非質變算法:是指運算過程中不會改變區間內元素的內容,如查找、遍歷等

迭代器

iterator的模式定義爲:提供一種方法,使之能夠依序尋訪某個容器所含的元素,而又無需暴露該容器的內部表達方式,STL的中心思想在於將容器(container)和算法(algorithms)分開,彼此獨立設計,最後再一貼膠着劑將他們撮合在一起

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章