C++ STL庫

STL中六大組件:

容器(Container)

一種數據結構,如list,vector,和deques ,以模板類的方法提供。爲了訪問容器中的數據,可使用由容器類輸出的迭代器;算法

迭代器(Iterator)

提供了訪問容器中對象的方法。例如,可使用一對迭代器指定list或vector中的必定範圍的對象。迭代器就如同一個指針。事實上,C++的指針也是一種迭代器。可是,迭代器也能夠是那些定義了operator*()以及其餘相似於指針的操做符地方法的類對象;數組

算法(Algorithm)

是用來操做容器中的數據的模板函數。例如,STL用sort()來對一個vector中的數據進行排序,用find()來搜索一個list中的對象,函數自己與他們操做的數據的結構和類型無關,所以他們能夠在從簡單數組到高度複雜容器的任何數據結構上使用;數據結構

仿函數(Function object)
迭代適配器(Adaptor)
空間配製器(allocator)

STL 容器底層數據結構實現

vector      

底層數據結構爲數組 ,支持快速隨機訪問函數

vector是咱們用到最多的數據結構,其底層數據結構是數組,操作系統

當咱們新建一個vector的時候,會首先分配給他一片連續的內存空間,當經過push_back向其中增長元素時,若是初始分配空間已滿,就會引發vector擴容,其擴容規則在gcc下以2倍方式完成:首先從新申請一個2倍大的內存空間;而後將原空間的內容拷貝過來;最後將原空間內容進行釋放,將內存交還給操做系統;指針

list            

底層數據結構爲雙向鏈表,支持快速增刪對象

deque       

底層數據結構爲一箇中央控制器和多個緩衝區排序

stack        

底層通常用list或deque實現,封閉頭部便可,不用vector的緣由應該是容量大小有限制,擴容耗時內存

queue     

底層通常用list或deque實現,封閉頭部便可,不用vector的緣由應該是容量大小有限制,擴容耗時(stack和queue實際上是適配器,而不叫容器,由於是對容器的再封裝)it

priority_queue

底層數據結構通常爲vector爲底層容器,堆heap爲處理規則來管理底層容器實現

set                   

底層數據結構爲紅黑樹,有序,不重複

multiset

底層數據結構爲紅黑樹,有序,可重複

map                

底層數據結構爲紅黑樹,有序,不重複

相關文章
相關標籤/搜索