容器用來管理一大群元素,STL提供了不同的容器,總的來說可分為三大類:
1.序列式容器(Sequence container) 一種有序集合,其內門每個元素均有確鑿位置——取決于插入時機和地點,與元素值無關。aarray、vector、deque、list和forward_list為STL定義好的5個序列式容器
2.關聯系容器 (Assocaitive container) 一種已排序集合,元素位置取決于其value(或key——如果元素是個key/value pair)和給定的某個排序準則,它們的值決定它們的次序。set、multiset、map和multimap是STL提供的4個關聯式容器
3.無序容器(Unordered(associative) container) 一種無序集合,其內每個元素的位置無關緊要,唯一重要的是某特定元素是否位于此集合內。
vector將其元素置于一個dynamic array中管理,允許隨機訪問,即可以利用索引直接訪問任何一個元素。在array尾部附加或刪除元素很快速,但在array中段或起始段安插元素比較費時。
deuqe 是一個dynamic array,可以向兩端發展,因此不論在尾部還是頭部安插元素都十分迅速。push_front()會將元素安插于集合前端,這種方式的結果是元素排放次序與安插次序相反,因為每個元素都安插于上一個元素的前面。你也可以使用成員函數push_back()在deque尾部附加元素。vector并未提供push_front(),因為其時間效率不佳(在vector頭部安插一個元素需要先移動全部元素)。
map 每個元素都是以key/value pair,其中key是排序準則的基準。每個key只能出現一次,不能重復。Map也可被視為一種關聯式數組,也就是“索引可為任意類型”的數組。
multimap和map的唯一區別是 元素可以重復,也就是multimap允許其元素擁有相同的key。
新聞熱點
疑難解答
圖片精選