容器(Containers)
- C++ container 基本上分為四大類:
- Sequence containers
- Container adaptors
- Associative containers
- Unordered associative containers
- 還有兩個特殊 containers: valarray, bitset
\(\begin{array}{|l|l|l|l|l|l|}\hline \text{Name}&\text{Iterators}&\text{Capacity}&\text{Access}&\text{Modifiers}&\text{Others} \\\hline \text{array}&\text{begin}&\text{size}&\text{[]}&\text{swap} \\&\text{end}&\text{empty}&\text{at} \\&&&\text{front} \\&&&\text{back} \\\hline \text{vector}&\text{begin}&\text{size}&\text{[]}&\text{push\_back}&\text{} \\&\text{end}&\text{empty}&\text{at}&\text{pop\_back} \\&&\text{capacity}&\text{front}&\text{insert} \\&&&\text{back}&\text{erase} \\&&&&\text{swap} \\&&&&\text{clear} \\\hline \text{deque}&\text{begin}&\text{size}&\text{[]}&\text{push\_back}&\text{} \\&\text{end}&\text{empty}&\text{at}&\text{pop\_back} \\&&&\text{front}&\text{insert} \\&&&\text{back}&\text{erase} \\&&&&\text{swap} \\&&&&\text{clear} \\\hline \text{list}&\text{begin}&\text{size}&\text{front}&\text{push\_back}&\text{sort} \\&\text{end}&\text{empty}&\text{back}&\text{pop\_back}&\text{reverse} \\&&&&\text{insert} \\&&&&\text{erase} \\&&&&\text{swap} \\&&&&\text{clear} \\\hline \text{forward\_list}&\text{begin}&\text{empty}&\text{front}&\text{push\_front}&\text{sort} \\&\text{end}&&&\text{pop\_back}&\text{reverse} \\&&&&\text{insert\_after} \\&&&&\text{erase\_after} \\&&&&\text{swap} \\&&&&\text{clear} \\\hline \end{array} \)
基礎容器
pair
序列式容器(Sequence Containers)
- 特點是不會對儲存的元素進行排序,元素排列的順序取決於儲存的順序。
vector
list, forward_list
deque
arrays
容器適配器(Container Adaptors)
- 用於封裝序列容器的類模板,在一般的序列容器的基礎上提供一些不同的功能,通過實現適配器的介面來提供不同的功能。
queue
priority_queue
stack
關聯性容器(Associative Containers)
- 又名 Map、Dictionary,是一種抽象的資料結構,包含著類似於(key, value)的有序對(entry)。
- 一個關聯陣列中的有序對(entry)可以重複(如multimap),也可以不重複(map)。
- 利用雜湊表(Hash Table)或搜尋樹(search tree)實現,有些情況下,有可以使用直接定址的陣列、二元搜尋樹或其他專門的結構。
set
multiset
map
multimap
無序關聯容器(Unordered Associative Containers(C++11))
- 通過雜湊表(Hash Table)實現的資料結構。
- 無序是指元素的名字(或者鍵值)的儲存是無序的;這與用平衡二元樹實現的有序的關聯性容器是相對概念。