STL容器



文章出自于  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
原文地址:https://www.cnblogs.com/mfrbuaa/p/3918955.html