1. 程式人生 > 其它 >STL各容器的實現原理

STL各容器的實現原理

STL共有六大元件

容器、演算法、迭代器、仿函式、介面卡、空間配置器

STL的實現是基於我們常見的資料結構

序列式容器:

vector:動態陣列

list:雙鏈表

deque:分配中央控制器map,map記錄著一系列的固定長度的陣列的地址。deque先從map中央的位置(因為雙向佇列,前後都可以插入元素)找到一個數組地址,向該陣列中放入資料,陣列不夠時繼續在map中找空閒的陣列來存資料。當map也不夠時重新分配記憶體當作新的map,把原來map中的內容copy的新map中。所以使用deque的複雜度要大於vector,儘量使用vector。

stack:基於deque

queue:基於deque

heap:完全二叉樹,使用最大堆排序,以陣列vector 的形式存放

priority_queue:基於heap

slist:單向連結串列

關聯式容器

set、map、multiset、multimap:基於紅黑樹,一種加上了額外平衡條件的二叉搜尋樹

hash table:散列表。將待存資料的key經過對映函式變成一個數組(一般是vector)的索引,例如:資料的key%陣列的大小=陣列的索引(一般文字通過演算法也可以轉換為數字),然後將資料當作此索引的陣列元素。有些資料的key經過演算法的轉換可能是同一個陣列的索引值(碰撞問題,可以用線性探測,二次探測來解決),STL是用開鏈的方法來解決的,每一個數組的元素維護一個list,他把相同索引值的資料存入一個list,這樣當list比較短時執行刪除,插入,搜尋等演算法比較快。

hash_map,hash_set,hash_multiset,hash_multimap:基於hash table