- 容器就是用來儲存東西的,它儲存的東西是特定類別,所以不能把不同類別的東西存在同一個容器。
- 通常每一種容器都會有迭代器來依序訪問容器內的每個元素。
- 通常每一種容器都會有類似的幾種功能,這方便我們記憶,但是這些功能會依照容器的類型而有不同的處理速度,所以要依據我們想做的事來選擇使用的容器。
不同容器內可儲存的型態不一樣
但不需要為此而另外寫一個class
可以利用template做出一個共同的模板
在這裡,我們只需要知道怎麼使用就好
// define
// main()
是一種容器專用的指標,指向容器內的元素
他的概念就像下面的i
一樣,
可以說i
是arr
陣列的迭代器
迭代器的用法跟指標很像
可以把它當作一個指向容器內某元素的指標
所有的容器都可使用以下兩種方法
container<Type>
序列容器內的元素會有先後順序。
可以把它想像成一整排的資料
所有序列容器都可使用以下幾類方法
迭代器、反向迭代器
內容修改 swap, clear, insert, erase
swap, clear
insert
erase
首尾元素
雖然叫向量,但我認為跟向量沒什麼關係。
vector是一個動態陣列,
它的陣列大小會自動增加,所以容量大小我們不用去管它。
因為是陣列,元素在記憶體中是連續的,所以支援隨機存取,速度也是容器中最快的。
隨機存取
單向push,pop
push:如過vector的容量已滿,會自動新增一個更大的陣列,
並將原本的所有內容全部複製到新的陣列。
就是雙向linked-list。
因為是linked-list,在容器任一節點做插入刪除或是改變順序都很方便,不會因元素數量而改變。
因為每個節點是靠指標連起來的,所以不像陣列一樣可以隨機存取,必須依順序一個個迭代。
雙向push,pop
其他功能
因為做插入刪除或是改變順序都很方便,所以功能也比其他容器多
雙向queue,用起來像雙向vector,可以在前後兩端增加刪除,也可以隨機存取。
看起來像是兩個vector,後面的vector就和原本的vector一樣,但前面的vector我看不懂他是怎麼實作出來的。
隨機存取
雙向push,pop
和其他類型的容器的差別是:
沒有迭代器,所以不能用foreach
沒有內容修改器,只能以push,pop來修改內容
因為只是要使用一些小功能,所以能使用的方法很少,但卻簡單好上手
資料結構的stack,可用來反轉
資料結構的queue,可用來緩衝
資料結構的max heap,可用來排序
不知道怎麼解釋…
用二元搜尋樹實作出來的,算是以set為主的類型
能用的功能有迭代器、內容修改,但並非和序列容器一樣
迭代器、反向迭代器
內容修改 swap, clear, insert, erase
swap, clear
insert
erase
離散數學教的集合,可以用來過濾重複元素,還會自動排序(大到小)。
為了符合集合的定義,它會自動將內部元素轉為const型態,以防止使用者亂修改。
Type == <Key, Value>
離散數學教的函數,一對一、一對多
跟C#的dictionary差不多
它和set很像。 map<K,V> 大概等於 set<pair<K,V>>
內容元素 pair<K,V>,一對key-value
跟set很像,差別在裡面的元素可以重複。
但它還是會自動將內部元素轉為const型態,以防止使用者亂修改。
跟map很像,差別在裡面的Key可以重複。
但它還是會自動將內部元素的Key轉為const型態,以防止使用者亂修改。
有什麼話要講,請用編輯模式在上面留言
kauhiant
cpp