容器用来管理一大群元素,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。
新闻热点
疑难解答
图片精选