STL 六大元件

2021-09-11 16:24:01 字數 1983 閱讀 5606

1、容器(containers):各種資料結構,如:序列式容器vector、list、deque、關聯式容器set、map、multiset、multimap。用來存放資料。從實現的角度來看,stl容器是一種class template。

序列式容器:

vector-陣列,元素不夠時再重新分配記憶體,拷貝原來陣列的元素到新分配的陣列中。

list-單鏈表。

deque-分配**控制器map(並非map容器),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-基於紅黑樹(rb-tree),一種加上了額外平衡條件的二叉搜尋樹。

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

hash_map,hash_set,hash_multiset,hash_multimap-基於hashtable。【】

2、演算法(algorithms):各種常用演算法,如:sort、search、copy、erase。從實現的角度來看,stl演算法是一種 function template。注意乙個問題:任何的乙個stl演算法,都需要獲得由一對迭代器所標示的區間,用來表示操作範圍。這一對迭代器所標示的區間都是前閉後開區間,例如[first, last)

3、迭代器(iterators):容器與演算法之間的膠合劑,是所謂的「泛型指標」。共有五種型別,以及其他衍生變化。從實現的角度來看,迭代器是一種將 operator*、operator->、operator++、operator- - 等指標相關操作進行過載的class template。所有stl容器都有自己專屬的迭代器,只有容器本身才知道如何遍歷自己的元素。原生指標(native pointer)也是一種迭代器。

4、仿函式(functors):行為類似函式,可作為演算法的某種策略(policy)。從實現的角度來看,仿函式是一種過載了operator()的class或class template。一般的函式指標也可視為狹義的仿函式。

5、配接器(adapters):一種用來修飾容器、仿函式、迭代器介面的東西。例如:stl提供的queue 和 stack,雖然看似容器,但其實只能算是一種容器配接器,因為它們的底部完全借助deque,所有操作都由底層的deque**。改變 functors介面者,稱為function adapter;改變 container 介面者,稱為container adapter;改變iterator介面者,稱為iterator adapter。

6、配置器(allocators):負責空間配置與管理。從實現的角度來看,配置器是乙個實現了動態空間配置、空間管理、空間釋放的class template。

這六大元件的互動關係:container(容器) 通過 allocator(配置器) 取得資料儲存空間,algorithm(演算法)通過 iterator(迭代器)訪問 container(容器) 內容,functor(仿函式) 可以協助 algorithm(演算法) 完成不同的策略變化,adapter(配接器) 可以修飾或套接 functor(仿函式)

STL六大元件

stl提供六大元件,彼此可以組合套用。1 容器 containers 各種資料結構。如vector,list,deque,set,map,用來存放資料。容器又可以分為順序容器和關聯容器.順序容器 vector,list,deque,stack,queue,heap,priority queue,sl...

STL 六大元件

1.容器 containers 各種資料結構,如vector,list,deque,set,map,用來存放資料。從實現的角度看,stl容器是一種class template。2.演算法 algorithms 各種常用的演算法如sort,search,copy,erase 從實現的角度看,stl演算...

STL六大元件

容器 containers 各種資料結構,如 vector list deque set map 用來存放資料。演算法 algorithms 各種常用演算法,如 sort search copy erase 分配器 allocators 負責空間配置與管理。迭代器 iterators 容器與演算法之...