栈(Stack)
原则:先进后出(LIFO)、后进先出(FOLI)
先进入的数据被压入栈底,最后进入的数据在栈顶;读取数据时从栈顶开始弹出数据(最后一个压入的数据被第一个读取出来)
允许进行插入和删除操作的一端称为栈顶(Top),另一端为栈底(Bottom),栈底固定,而栈顶浮动
栈中元素个数为零时称为空栈。插入一个元素称为进栈(Push),删除一个栈顶元素称为出栈(Pop)
#include <stack>
成员函数 功能 bool empty() 栈为空,返回true,否则返回false void pop() 删除栈顶元素,即出栈 void push(const TYPE & val) 将新元素val进栈,使其成为栈顶的第一个元素 TYPE & top() 查看当前栈顶元素 size_type_size() 返回堆栈中的元素数目
向量(vector)
是一个动态数组,随机存取任何元素都能在常数时间完成。
vector是一个线性顺序结构,相当于数组
#include <vector>
映射(Map)、多重映射(Multimap)
一种基于某一类型Key的键集的容器,提供对TYPE类型的数据进行快速和高效的检索
Multimap允许重复键值,Map不允许
Map内部数据的组织是一颗红黑树(一种严格意义上的平衡二叉树),这棵树具有对数据自动排序的功能,所以在Map内部所有的Key都是有序的
#include <map>
列表(list)
是一个线性链表结构(Double-Linked Lists,双链表),数据由若干个结点构成,每一个结点都包括一个信息块Info(即实际存储的数据)、一个前驱指针Pre和一个后驱指针Post
无须分配内存大小且可以任意收缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来
由于结构原因,List随机检索的性能非常不好,因为它要从头一个一个地顺序查找。检索时间与目标元素的位置成正比。
虽然随机检索不够快,但是它能够迅速地在任意结点进行插入和删除操作
#include <list>
集合(Set)
是一个容器,其中包含的元素的值是唯一的。
集合中的元素按一定的顺序排列,并被作为集合中的实例
一个集合通过一个链表来组织,其具体实现采用了红黑树的数据结构。
在插入操作和删除操作上比向量(Vector)快,但查找或添加末尾的元素时会有些慢
#include <set>
队列(Queue)
原则:先进先出(FIFO)
是一种特殊的线性表,只允许在表的前端(Front)进行删除操作,而在表的后端(Rear)进行插入操作。
进行插入操作的端称为队尾,进行删除操作的端称为队头。队中无元素时,称为空队列
#include <queue>
优先队列(Priority Queue)
与队列一样,只能从队尾插入元素,从队首删除元素
但是,与队列不同的是,优先队列中最大的元素总是位于队首,所以出队时,并非按照先进先出原则进行;而是将当前队列中最大的元素出队。
元素的比较规则默认按元素值从大到小排序,可以重载<操作符来重新定义比较规则
#include <queue>