STL中的容器介绍

STL中的容器主要包括序列容器、关联容器、无序关联容器等。

一】序列容器

(1) vector

vector 是数组的一种类表示,提供自动管理内存的功能,除非其他类型容器有更好满足程序的要求,否则,我们

应默认使用这中容器。

(2) deque

deque 表示双端队列,在STL中,其实现类似于vector,支持随机访问。主要区别在于使用deque在开始位置插入和删除元素的时间

是固定的,所以如果多数操作发生在序列的起始和结尾处,应考虑使用deque结构。

(3) list

list表示双向链表。list和vector之间关键的区别在于,list在链表中任一位置进行插入和删除时间都是固定的。list强调的是快速的插入和删除,

而vector强调的是快速地随机访问。list不支持数组表示法和随机访问

(4)forward_list

它实现了单链表,只需要正向迭代器,属于不可反转的的容器。

(5)queue

queue模板类是相当于一个适配器,它让底层类(默认为deque)展示典型的队列接口。它的使用限制要比deque多,不允许随机访问队列元素,

甚至不允许遍历队列。

(6)priority_queue

该模板类是另一个适配器类,它支持的操作与queue类似,主要区别在于priority_queue使用时,最大的元素被移到队首;

底层类默认是vector。可以修改用于确定哪个元素放到队首的比较方式,方法是提供一个可选的构造函数参数。

(7)stack

与queue类似,stack也是一个适配器类,它给底层类(默认为vector)提供了典型的栈接口。

(8)array

虽然模板类array不是STL容器,但还是可以将很多标准的STL算法用在array对象上,如copy、for_each。

二】关联容器

最简单的关联容器就是set,它的值类型与键相同,键是唯一的,对于set来说,值就是键,multiset类似于set,只是可能有多个值的键相同。

在map中,值与键的类型不同,键是唯一的,每个键只对应一个值,multimap与map类似,只是一个键可以与多个值关联。

三】无序关联容器

与关联容器一样,无序关联容器也将值与键关联起来,并使用键来查找值。但是底层的差别在于,关联容器是基于树结构的,而无序关联容器是

基于数据结构哈希表的,旨在提高添加和删除元素的速度以及提高查找算法的效率。主要有4种无序关联容器,unordered_set、unordered_multiset

unordered_map、unordered_multimap。

上一篇:JavaScript 日期(Date)之ValueOf()方法


下一篇:C++ STL中Map的按Key排序和按Value排序