1. 程式人生 > >C++容器介面卡

C++容器介面卡

一、標準庫順序容器介面卡的種類
標準庫提供了三種順序容器介面卡:queue(FIFO佇列)、priority_queue(優先順序佇列)、stack(棧)

二、什麼是容器介面卡

首先,我們要明白介面卡是幹什麼的?其實就是一個介面轉換裝置,是得我們能用特定的方法去操作一些我們本來無法操作的東西。舉一個例子,比如你的一個裝置支援串列埠線,而你的電腦支援的是usb口,這時候,我們沒有必要重新買一個支援usb的裝置,只需要一根串列埠轉usb口的小玩意,讓你的裝置能夠連線到usb插口上,而它就是介面卡。
那麼C++中的容器介面卡是幹什麼的呢?可以做一個類比,我們已有的容器(比如vector、list、deque)就是裝置,這個裝置支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子:先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫一個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。
言歸正傳,理解了什麼是介面卡以後,其實問題就很簡單的。C++中定義了3種容器介面卡,它們讓容器提供的介面變成了我們常用的的3種資料結構:棧(先進後出)佇列(先進先出)和優先順序佇列(按照優先順序(“<”號)排序,而不是按照到來的順序排序)。
至於具體是怎麼變的,我們可以先了解一個大概:預設情況下,棧和佇列都是基於deque實現的,而優先順序佇列則是基於vector實現的。當然,我們也可以指定自己的實現方式。但是由於資料結構的關係,我們也不能胡亂指定。棧的特點是後進先出,所以它關聯的基本容器可以是任意一種順序容器,因為這些容器型別結構都可以提供棧的操作有求,它們都提供了push_back、pop_back和back操作。 佇列queue的特點是先進先出,介面卡要求其關聯的基礎容器必須提供pop_front操作,因此其不能建立在vector容器上;對於優先順序佇列,由於它要求支援隨機訪問的功能,所以可以建立在vector或者deque上,不能建立在list上。

三、容器介面卡
要使用介面卡,需要加入一下標頭檔案:

#include <stack>        //stack
#include<queue>       //queue、priority_queue
種類 預設順序容器 可用順序容器 說明
stack deque vector、list、deque
queue deque list、deque 基礎容器必須提供push_front()運算
priority_queue vector vector、deque 基礎容器必須提供隨機訪問功能

四、定義介面卡

1、初始化
 stack<int> stk(dep);
2、覆蓋預設容器型別
 stack<int,vector<int> > stk;

五、容器介面卡的使用

1、下面的程式讀入一系列單詞儲存在stack中,然後再顯示輸入的單詞。

#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
    stack<string> words;
    string str;
    cout<<"Enter some words(Ctrl + Z to end):"<<endl;
    while(cin >> str)
    {
        words.push(str);
    }
    while(words.empty() == false)
    {
        cout<<words.top()<<endl;
        words.pop();
    }
    return 0;
}