八、STL中的容器适配器stack、queue、priority_queue

STL中的容器适配器stack、queue、priority_queue

一、简介

1.1 容器适配器

STL中的容器适配器分为三种:

  1. stack: 头文件 < stack>
    • 栈 – 后进先出
  2. queue: 头文件 < queue>
    • 队列 – 先进先出
  3. priority_queue: 头文件 < queue>
    • 优先级队列 – 最高优先级元素总是第一个出列

都有3个成员函数:

  1. push: 添加一个元素;
  2. top: 返回栈顶部或队头元素的引用
  3. pop: 删除一个元素

容器适配器上没有迭代器,STL中各种排序, 查找, 变序等算法都不适合容器适配器。

1.2 stack

stack 是后进先出的数据结构,只能插入、删除、访问栈顶的元素。
可用 vector, list, deque来实现,缺省情况下, 用deque实现,用 vector和deque实现, 比用list实现性能好。

template<class T, class Cont = deque< T> >
class stack {
    …
};

stack 中主要的三个成员函数:

  1. void push(const T & x);
    将x压入栈顶
  2. void pop();
    弹出(即删除)栈顶元素
  3. T & top();
    返回栈顶元素的引用. 通过该函数, 可以读取栈顶元素的值, 也可以修改栈顶元素

1.3 queue

和stack 基本类似,可以用 list和deque实现,缺省情况下用deque实现。

template<class T, class Cont = deque<T> >
class queue {
……
};

同样也有push, pop, top函数,push发生在队尾,pop, top发生在队头, 先进先出。

1.4 priority_queue

和 queue类似,可以用vector和deque实现,缺省情况下用vector实现。priority_queue 通常用堆排序技术实现, 保证最大的元素总是在最前面。

执行pop操作时, 删除的是最大的元素
执行top操作时, 返回的是最大元素的引用

默认的元素比较器是 less< T>

二、程序示例

#include<iostream>
#include<queue>
#include<stack>
using namespace std;

int main()
{
    priority_queue<double> pri;
    pri.push(9.6);
    pri.push(2.5);
    pri.push(10.5);
    pri.push(21.2);

    while(!pri.empty()){
        cout<<pri.top()<<endl;
        pri.pop();
    }

    cout<<"***********"<<endl;

    stack<int> st;
    st.push(5);
    st.push(6.3);
    st.push(8.2);
    st.push(2);
    st.push(1);

    while(!st.empty()){
        cout<<st.top()<<endl;
        st.pop();
    }

    cout<<"***********"<<endl;

    queue<int> q;
    q.push(5);
    q.push(6);
    q.push(2);
    q.push(3);
    q.push(9);

    while(!q.empty()){
        cout<<q.front()<<endl;
        q.pop();
    }

    return 0;
} 

输出:

21.2
10.5
9.6
2.5
***********
1
2
8
6
5
***********
5
6
2
3
9

你可能感兴趣的:(Queue,栈,队列,STL)