5.1 stack,queue以及priority_queue

*:stack

使用要包含头文件stack,栈是一种先进后出的元素序列,删除和访问只能对栈顶的元素(最后一个添加的元素)进行,并且添加元素只能添加到栈顶。栈内的元素不能访问,要想访问先要删除其上方的所有元素,使之变成栈顶元素才可以。

1)定义

template<class T,class Cout=deque<T>>

class stark{

       .......

};

第二个参数表明,在默认情况下,stack都是用deque来实现的。也可以用指定的vector和list来实现。但不拥有顺序容器的成员函数。

2)成员函数

除了所有容器都有的成员函数size和empty外,还有push,top,pop三个成员函数。

3)例

//program 19.5.1.1.cpp  stack用于转换十进制数到k进制数
#include <iostream>
#include <stack> //使用stack需要包含此头文件
using namespace std;
int main()
{
    int n,k;
    stack<int> stk;
    cin >> n >> k;  //将n转换为k进制数 
    if( n == 0) {
        cout << 0;
        return 0;
    }
    while( n ) {
        stk.push( n % k);
        n /= k;
    }
    while( ! stk.empty ()) {
        cout << stk.top();
        stk.pop();
    }
    return 0;
}

**:queue

使用必须包含queue头文件。队列queue是先进先出。删除和访问只能发生在队尾,添加动作只能在队尾进行。

1)定义

template<class T,class Cout=deque<T>>

class queue{

   .........

};

2)成员函数

和stack类似,差别在于push发生在队尾,pop发生在队头。

***:priority_queue

1)定义

2)例

//program 19.5.2.1.cpp  priority_queue用法示例
#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( !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( !pq2.empty() ) {
        cout << pq2.top() << " ";    
        pq2.pop();
    }
    //上面输出 3.2 5.4 9.8 9.8
    return 0;
}

 

posted @ 2016-05-09 21:46  党兴明  阅读(178)  评论(0编辑  收藏  举报