首先,这三者都是顺序容器适配器(适配器(adaptor)是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型)。
本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。
例如,假设deq是deque<int>类型的容器,则可以用deq初始化一个新的栈:
stack<int> stk(deq);//带容器参数的构造函数将容器参数的副本作为其基础值。
一、Stack
Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能——也就是说实现了一个先进后出(FILO)的数据结构。
empty() | 堆栈为空则返回真 |
pop() | 移除栈顶元素 |
push() | 在栈顶增加元素 |
size() | 返回栈中元素数目 |
top() | 返回栈顶元素 |
具体使用方案请参考这道题目的代码。
二、Queue
Queue(队列)是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。back() | 返回最后一个元素 |
empty() | 如果队列空则返回真 |
front() | 返回第一个元素 |
pop() | 删除第一个元素 |
push() | 在末尾加入一个元素 |
size() | 返回队列中元素的个数 |
具体使用方案请参考这道题目的代码 。
三、Priority_queue
维基百科:堆(heap)亦被称为:优先队列(priority queue)。堆总是一棵完全树。
Its first element is always the greatest of the elements it contains.(队首默认是最大的)
Priority Queues(优先队列)类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。每次更新的复杂度为O(log q.size())。
个人感觉优先队列比多元集合(multiset)在代码上写起来很方便。
建议可以只用优先队列实现的就不要用多元集合实现了。
empty() | 如果优先队列为空,则返回真 |
pop() | 删除第一个元素 |
push() | 加入一个元素 |
size() | 返回优先队列中拥有的元素的个数 |
top() | 返回优先队列中有最高优先级的元素 |
具体使用方案请参考例子A和B。
PS:在priority_queue<ll, vector<ll>, greater<ll> > pq;中
第一个参数为数据类型,第二个参数为保存数据的容器(默认为vector<int>),第三个参数为元素比较函数(默认为less)。
参考网址:
http://www.cplusplus.com/reference/stack/stack/