STL之容器適配器

前言

在STL中定義了三種容器適配器:queue,priority_queue,和stack。
容器適配器是利用基本容器(如之前介紹的deque,vector,list)作爲自己的底層容器,適配它以實現自己特定功能的容器。
容器適配器有一個共同的特點:都不支持迭代器(Iterator)。

1.queue

特點:FIFO(先進先出)原則。
模板定義

template <class T,class Container = deque<T>> class queue

T是指存儲的數據類型
Container是指用於保存queue的容器類型,默認的容器是deque,還可以使用list作爲queue的底層容器,但不能使用vector作爲其的底層容器,因爲vector不支持pop_front()函數。

queue的構造函數:

explicit queue(const Container &cnt = Container())

此構造函數創建空的queue。
queue的頭文件是:

#include <queue>

queue成員函數

value_type &back();
const value_type &back() const
返回queue中最後一個元素
bool empty() const如果調用queue爲空則返回true,否則返回false
value_type &front();
const value_type &front() const
返回queue中第一個元素
void pop()刪除queue中第一個元素
void push(const T &val)將值爲val的元素加到queue的尾部
size_type size() const返回queue中當前元素個數
    queue<int> q;

    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);

    if (!q.empty())
    {
        cout<<"size() = "<<q.size()<<"\n";
    }

    cout<<"back() = "<<q.back()<<" ; front() = "<<q.front()<<"\n";

    q.pop();
    cout<<"after pop, size() = "<<q.size()<<"\n";

    q.push(5);
    cout<<"after push(), size() = "<<q.size()<<"\n";

    cout<<"contents of queue: ";
    for (int i=0;i<q.size();i++)
    {
        cout<<q.front()<<" ";
        q.push(q.front());
        q.pop();
    }

結果爲:
這裏寫圖片描述

2.priority_queue

特點:按優先級來排序queue中的元素
類模板

template<class T,class Container = vector<T>, class Comp = less<Container::value_type> > class priority_queue

T指存儲的數據類型
Container是保存priority queue的容器類型,默認是vector,底層容器必須支持隨機訪問迭代器,因此底層容器可以是deque,不能是list。
Comp指priority queue中元素的比較函數

priority_queue適配器有以下構造函數

explicit priority_queue(const Comp &cmpfn = Comp(),Container &cnt = Container());

template<class InIter>
priority_queue(InIter start,InIter end,const Comp &cmpfn = Comp(),Container &cnt = Container())

第一個構造函數創建空的priority_queue
第二個構造函數創建由start和end指定範圍的priority queue。

priority_queue頭文件:

#include <queue>

priority_queue成員函數

bool empty()如果調用priority_queue爲空,返回true,否則返回false
void pop()刪除priority_queue中第一個元素
void push(const T &val)將元素添加到priority_queue隊列中
size_type size() const返回priority_queue中當前元素個數
const value_type &top() const返回priority_queue中優先級最高的元素,不刪除元素

Example

#include <iostream>
#include <queue>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    priority_queue<double> pq;

    pq.push(1.0);
    pq.push(8.9);
    pq.push(3.5);
    cout<<"size  = "<<pq.size()<<"\n";
    while(!pq.empty()){
        cout<<pq.top()<<" \n";
        pq.pop();
    }

    return 1;
}

結果是:
這裏寫圖片描述

3.stack

特點:後進先出。
類模板:

template <class T,class Container = deque<T> > class stack

T是存儲的數據類型
Container指底層的容器類型,默認是deque,還可以使用vector,list作爲其的底層容器。

stack適配器的構造函數:

explicit stack(const Container &cnt = Container())

創建空的stack
頭文件是:

#include <stack>

stack成員函數

bool empty() const如果stack爲空返回true,否則返回false
void pop()刪除stack棧頂元素,也是容器中最後添加的元素
void push(const T &val)將元素壓進堆棧,也就是棧頂元素
size_type size() const返回當前棧內元素個數
value_type &top();
const value_type &top() const
返回棧頂元素的引用,不會刪除棧頂元素

Code Example

    stack<char> s;

    s.push('A');
    s.push('B');
    s.push('C');
    s.push('D');

    while (!s.empty())
    {
        cout<<"Popping: ";
        cout<<s.top()<<"\n";
        s.pop();
    }

結果是:
這裏寫圖片描述

發佈了49 篇原創文章 · 獲贊 49 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章