C語言中文網 目錄
首頁 > 編程筆記 > C++筆記 閱讀:219

C++ deque和queue容器

標準模板庫 STL 提供了兩種容器:dequequeue,以實現和隊列類似的數據 結構。deque 是一個雙端隊列。它類似于矢量,但允許在前端和后端高效地訪問值。隊列抽象數據類型就像棧抽象數據類型:它實際上是一個容器適配器。

deque容器

可以將 deque 容器想象成一個矢量,但它可以快速訪問前端以及后端的元素(和矢量一樣,deque 也可以使用 [] 運算符訪問元素)。

deque成員函數
圖 1 deque 成員函數

使用雙端隊列 ADT 的程序必須包含 deque 頭文件。由于本節更關心它與隊列類似的特性,所以就來集中討論一下 push_back、pop_front 和 front 成員函數,如圖 1 所示。它們的示例和相應描述如表 2 所示。

表 2 deque的成員函數及其示例
成員函數 示例和描述
push_back iDeque.push back(7);
接受一個值作為參數插入到 deque 中。參數被插入在最后一個元素之后(被推到 deque 后面)
pop_front iDeque.pop front();
刪除 deque 的第一個元素并丟棄它
front cout << iDeque.front() << endl;
front 返回對 deque 第一個元素的引用

下面的程序演示了雙端隊列容器的使用:
// This program demonstrates the STL deque container.
#include <iostream>
#include <deque>
using namespace std;

int main()
{
    deque<int> iDeque;
    cout << "I will now enqueue items. . . \n";
    for (int x = 2; x < 8; x += 2)
    {
        cout << "Pushing " << x << endl;
        iDeque.push_back(x);
    }
    cout << "I will now dequeue items...\n";
    while (!iDeque.empty())
    {
        cout << "Popping " << iDeque.front() << endl; iDeque.pop_front();
    }
    return 0;
}
程序輸出結果:

I will now enqueue items. . .
Pushing 2
Pushing 4
Pushing 6
I will now dequeue items...
Popping 2
Popping 4
Popping 6

queue容器適配器

queue 容器適配器可以建立在矢量、鏈表或者雙端隊列的基礎上。默認情況下,它使用一個雙端隊列作為其基礎。

queue 支持的插入和刪除操作與棧 ADT 所支持的類似:push、pop 和 front。但是,它們的表現有所不同。queue 版本的 push 始終在隊列的后面插入一個元素。queue 版本的 pop 始終從結構的前面刪除一個元素。front 函數返回隊列前面的元素的值。

下面的程序演示了一個隊列。由于該隊列的聲明沒有指定適配哪一種類型的容器,所以該隊列將建立在一個雙端隊列上。
//This program demonstrates the STL queue container adapter.
#include <iostream>
#include <queue>
using namespace std;

int main()
{
    queue<int> iQueue;
    cout << "I will now enqueue items...\n";
    for (int x = 2; x < 8; x += 2)
    {
        cout << "Pushing " << x << endl;
        iQueue.push(x);
    }
    cout << "I will now dequeue items...\n";
    while(!iQueue.empty())
    {
        cout << "Popping " << iQueue.front () << endl;
        iQueue.pop ();
    }
    return 0;
}
程序輸出結果:

I will now enqueue items...
Pushing 2
Pushing 4
Pushing 6
I will now dequeue items...
Popping 2
Popping 4
Popping 6

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo