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就行了,能夠靈活的加入,能夠遍歷,即可...