關於SGI STL中的容器的簡介

2021-08-19 15:18:30 字數 1710 閱讀 1241

sgi stl主要含有兩類容器:序列式容器和關聯式容器。

標準:array(build-in), vector, heap, priority-queue;

非標準: list, slist, deque;

配接器:stack, queue。

1.vector

單向開口連續線性動態空間,一般採用倍加擴容,分攤常數時間o(1);

迭代器為random access iterator(隨機訪問迭代器),底層的實際型別為t*。

2.list

雙向環狀鍊錶,所以資料只要乙個節點即可(尾端空白節點);

迭代器為bidiractional iterator(雙向迭代器)。

3.deque

雙向佇列,雙向開口的連續線性空間,迭代器為random access iterator;

與vector相比,對頭部插入刪除操作僅需常數時間o(1);且沒有capacity觀念。

4.stack

棧,filo:first in last out;

容器配接器adapter,預設以deque為底層容器,還可以list和vector,不提供遍歷功能和迭代器。

5.queue

佇列,fifo:first in first out;

容器配接器adapter,預設以deque為底層容器,還可以list為底層容器,但是不能以vector為底層容器,不提供遍歷功能和迭代器。

6.heap

堆,以演算法形式給出。

7.priority_queue

優先佇列,filo: first in largest out;

容器配接器adapter,預設以vector為底層容器,以heap演算法為輔,不提供遍歷功能和迭代器。

8.slist

單向鍊錶,不在標準規範內,迭代器型別是forward iterator。

關聯式容器主要分為set(集合)和map(對映表),以及衍生multiset(多鍵集合)multimap(多鍵對映表),底層均以rb-tree(紅黑樹)完成。

非標準的關聯式容器hashtable(雜湊表),以及與之為底層的hash_set(雜湊集合),hash_map(雜湊對映表),hash_multiset(雜湊多鍵集合),hash_multimap(雜湊多鍵對映表)。

set

根據value自動排序,迭代器型別set::iterator定義為rb-tree::const_iterator,所以無法通過迭代器改變set元素的值。

map

迭代器型別map::iterator定義為rb-tree::iterator,可以通過改變迭代器改變元素的實值(value),但無法通過迭代器改變元素的鍵值(key);

hashtable

字典結構,在插入,刪除,搜尋等操作上具有常數時間。

hash_set

set以rb-tree為底層實現,hash_set則是以hashtable為底層實現,rb-tree與hashtable相比較具有自動排序功能,故set較hash_set具有自動排序。

C STL中的容器簡介

c stl中提供了強大的容器 containers 來替代程式中常用的資料結構,主要包括 字串 string 動態陣列 vector 佇列 queue 棧 stack 堆 priority queue 鏈結表 list 集合 set 字典 map 使用這些容器可以極大的簡化程式的編寫,提高程式設計的...

關於C 中的容器

關於c 中的容器 c 中的容器類包括 順序儲存結構 和 關聯儲存結構 前者包括vector,list,deque等 後者包括set,map,multiset,multimap等。若需要儲存的元素數在編譯器間就可以確定,可以使用陣列來儲存,否則,就需要用到容器類了。1 vector 連續儲存結構,每個...

關於vb中的容器

最失敗的事情莫過於,用了十來年的vb,忽然發現,原來自己還沒有搞懂一些最簡單的東西.昨天,第一次試用了一下vb的類的繼承,感覺還不賴。今天,開始琢磨一下很久以來一直困擾我的乙個問題,就是在vb中找乙個比較好的的容器。其實我的要求很低,想c 中的arraylist就行了,能夠靈活的加入,能夠遍歷,即可...