STL容器

来源:互联网 发布:easyui 表单插件js 编辑:程序博客网 时间:2024/05/22 08:21



文章出自于  http://blog.csdn.net/zhouyunxuan



七种序列容器类型



1.vector vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大缩小,
它提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。除序列外,vector还是可反转容器


2.deque模版类 double-ended queue(双端队列) ,支持随机访问,从deque对象的开始位置插入和删除元素的时间是固定的,而不像vector是线性时间。
所以多数操作是发生在序列的起始和结尾处,就应该考虑deque。为实现在deque两端执行插入和删除操作的时间为固定的这一目的,deque对象的设计比vector对象更为复杂。
因此,尽管两者都提供对元素的随机访问和在序列中部执行线性时间的插入和删除操作,但是vector容器执行这些操作时速度还要快些。


3.list(双向链表),除了第一个和最后一个元素外,每个元素都与前后的元素相连接,这意味着可以双向遍历链表,list和vector之间关键区别在于,list在链表中任一位置进行插入和删除的时间都是固定的(vector模版提供了除结尾处外的线性时间的插入和删除,在结尾处,它提供了固定时间的插入和删除)。因此,vector强调的是通过随机访问快速访问,而list强调的是元素的快速插入和删除。list也可以反转容器,list不支持数组表示法和随机访问。


4.forward_list,它实现了单链表,在这种链表中,每个节点都只链接到下一个节点,而没有链接到前一个节点。因此forward_list只需要正向迭代器,而不需要双向迭代器。因此,不同于vector和list,forward_list是不可反转的容器。相比list,forward_list更简单,更紧凑,但功能也更少。


5.queue,queue模版的限制比deque更多,它不仅不允许随机访问队列元素,甚至不允许遍历队列。它把使用限制在定义队列的基本操作上,可以将元素添加到队尾,从队首删除元素,查看队首和队尾的值,检查元素数目和测试队列是否为空。


6.priority_queue,和queue的区别在于,最大的元素被移到队首。内部区别在于,默认的底层类是vector。可以修改用于确定哪个元素放到队首的比较方式。方法是提供一个构造函数。


7.stack,提供了典型的栈接口,stack模版的限制比vector更多。它不仅不允许随机访问栈元素,甚至不允许遍历栈,它把使用限制在定义栈的基本操作上,即可以将压入推到栈顶,从栈顶弹出元素,查看栈顶的值,检查元素数目和测试栈是否为空.于queue想死,如果要使用栈中的值,必须首先使用top()来检索这个值,然后使用pop将它中栈中删除。


四种关联容器





1.set,其值类型与键相同,键是唯一的。这意味着集合中不会有多个相同的键。


2.multiset 可以有多个相同的键。


3.map 存储键值对的。


4.multimap,multimap也是可以反转的,经过排序的关联容器,但键和值的类型不同,且同一个键可能与多个值相关联。




四种无关联容器

无序关联容器是对容器概念的另一种改进。与关联容器一样,无序关联容器也将键与值关联起来,并使用键来查找值,但底层的差别在于,关联容器是基于树结构的,而无序关联容器是基于数据结构哈希表的




1.unordered_set


2.unordered_multiset


3.unordered_map


4.unordered_mutimap
0 0
原创粉丝点击