c++容器

1. 容器c++

容器類型是用於建立具體容器對象的模板,c++ 11之前的11個容器類型是:deque, list, queue, priority_queue, stack, vector, map, multimap, set, multiset 和 bitset算法

c++11 新增了forward_list, unordered_map, unordered_multimap, unordered_set 和 unordered_multiset, 且再也不將 bitset 視爲容器,而是將其視爲一種獨立的類別。數組

一些基本的容器特徵以下:數據結構

 c++新增的容器要求ide

2. 序列測試

序列容器有deque, forward_list, list, queue, priority_queue, stack, vector, array也被概括到序列容器,雖然不知足序列的全部要求。c++11

序列要求元素按照嚴格的線性順序排列,即存在第一個元素,最後一個元素,除第一個元素和最後一個元素之外,每一個元素的先後都有一個元素,數組和鏈表都是序列,可是分支結構不是。對象

deque, list, queue, priority_queue, stack, vector, array都是序列概念的模型,都支持上面模型。blog

序列的可選操做排序

 

 2. vector

vector是一種數組的類的表示,它提供了自動內存管理的功能,能夠動態的改變vector對象的長度

vector是可反轉容器,提供了兩個類方法: rbegin()和rend(),前者返回反轉序列的超尾迭代器.

3. deque

deque表示雙端隊列,支持隨機訪問,主要區別在於,deque的開始未知插入和刪除 元素的時間是固定的,不像vector是線性時間,若是多數操做發生在隊列的起始和結束位置,應當考慮使用deque數據結構

4. list

list表示雙向鏈表,除了第一個和最後一個元素之外,每一個元素都和先後的元素鏈接,意味着能夠雙向遍歷鏈表,list與vector的區別在於,list在鏈表中任意位置插入和刪除的時間都是固定的,(vector提供了除結尾外線性時間的插入和刪除,在結尾處,提供了固定時間的插入和刪除),所以,vector強調的是經過隨機訪問快速訪問,list 強調的是元素的快速插入和刪除。

vector也是可反轉容器,不一樣的是,list 不支持數組表示法和隨機訪問,與矢量迭代器不一樣,在容器中插入和刪除元素之後,鏈表迭代器指向的元素不變。

5, forward_list

forward_list是不能翻轉的正向迭代器,單鏈表

6. queue

是一個適配器類,底層類爲(deque),queue模板的限制比deque多,不容許隨機訪問隊列元素,不容許遍歷隊列,能夠將元素添加到隊尾,從隊首刪除元素,查看隊首和隊尾元素的值,檢查元素的數目和測試隊列是否爲空。

7. priority_queue

是一個適配器類,默認的底層類爲vector,在優先隊列中,最大的元素被移到隊首。默認的底部類是vector,能夠修改肯定哪一個元素放到隊首的比較方式

priority_queue<int> pq;

priority_queue<int> pq(greater<int>);  // use greater<int> to order

8. stack

是一個適配器類,默認的底層爲vector,stack的限制比vector更多,不容許隨機訪問棧元素,不容許遍歷棧,把使用限制在定義棧的基本操做上。將壓入推到棧頂,從棧頂彈出元素,查看棧頂的值,檢查元素的數目,測試棧是否爲空。

9. array

 並不是stl容器,由於長度是固定的,array沒有定義調整容器大小的操做,如push_back()和insert(),可是定義了operator[]()和at(),能夠將不少的stl算法用於array,例如copy()和for_each()

10 關聯容器

關聯容器將值和鍵關聯在一塊兒,並使用鍵來查找值。stl 提供了四種關聯容器,set, multiset, map, multiamp

set:鍵和值的類型相同,鍵是惟一的,集合中不會有多個相同的鍵,multiset 可能有多個值的鍵相同。\
The value of an element is also the key used to identify it.  set的鍵和值相同,set默認是已經排序的。

map:鍵和值的類型不一樣,鍵是惟一的,集合中不會有多個相同的鍵,multimap 可能有一個鍵和多個值關聯。

相關文章
相關標籤/搜索