stack
- stack 是后进先出的数据结构,只能插入 、删除 、访问栈顶的元素
- 可用vector , list , deque 来实现。缺省情况下,用deque来实现。用list和deque来实现,比用list实现性能好。
template <class T , class Cont = deque<T> >
class stack
{
...
}
stack 上可以进行以下操作:
- push插入元素
- pop删除元素
- top返回栈顶元素的引用
queue和stack基本类似,可以用list和deque来实现,缺省情况下用deque来实现。
template< class T , class Cont = deque<T> >
class queue
{
...
}
- 同样也有push,pop和top函数,但push发生在队尾,pop和top发生在对头,先进先出。
- 有back成员可以返回队尾元素的引用
priority_queue
template<class T , class Container = vector<T> > , class Compare = less<T> >
class priority_queue;
- 和queue类似,可以用vector和deque实现,缺省情况下用vecotor实现。
- priority_queue通常用堆排序技术实现,保证最大元素总是排在最前面。即执行pop操作时,返回的是最大元素的引用,默认的元素比较器是less
- priority_queue的push和pop的时间复杂度O(logn)
- top()的时间复杂度O(1)
- 容器适配器的元素个数
stack,queue,priority_queue都有
empty成员函数判断适配器是否为空
size() 成员函数返回适配器中元素个数 - priority代码举例子
#include <queue>
#include <iostream>
using namespace std;
int main()
{
priority_queue<double> pq1;
pq1.push( 3.2 );
pq1.push( 9.8 );
pq1.push( 9.8 );
pq1.push( 5.4 );
while( false == pq1.empty() )
{
cout << pq1.top() << " , ";
pq1.pop();
} //上面输出9.8 9.8 5.4 3.2
cout << endl;
priority_queue< double , vector<double> , greater<double> > pq2;
pq2.push( 3.2 );
pq2.push( 9.8 );
pq2.push( 9.8 );
pq2.push( 5.4 );
while( false == pq2.empty() )
{
cout << pq2.top() << " , ";
pq2.pop();
}
//上面输出3.2 5.4 9.8 9.8
return 0;
}
输出结果: