第十一篇:(順序)容器的好伴侶 --- 容器介面卡

穆晨發表於2017-01-26

前言

       vector容器的資料結構原型是順序表,它很好的實現了順序表的功能,大大方便了程式設計。好了,現在假設有天我又想用棧,那麼有沒有棧對應的容器呢?很遺憾,木有。但基於“棧”可以由順序表或者連結串列實現這一特性,C++提供了stack給我們使用,來解決棧的實現這個問題。stack可不是類,也不是容器,那它是什麼呢?它就是本文要討論的一個新的型別 --- 容器介面卡

什麼是容器介面卡?

       容器介面卡是對容器的一種再封裝。不同的容器介面卡提供不同的函式,使容器的功能得到全新的特定的擴充套件。(但它和容器的容器是有區別的:容器介面卡不支援迭代器和演算法,使用起來限制比較大)。標準庫提供了三種容器介面卡:queue,stack和priority_queue。

容器介面卡怎麼用?

       一般來說,先定義一個容器,接著給該容器配備相應的容器介面卡,然後就可以使用該容器介面卡特有的函式處理資料了。這裡可以省略掉容器定義那一步,容器介面卡將自動分配容器。下面這個程式碼示範了棧容器介面卡stack的用法。我們先定義一個vector容器,接著給該vector容器分配stack容器介面卡,然後使用棧容器提供的函式自頂向下的輸出所有元素,解決了前言所提出的問題:

 1 #include <iostream>
 2 #include <vector>
 3 // 使用容器介面卡必須包含相應的標頭檔案
 4 #include <stack>
 5   
 6 using namespace std;
 7   
 8 int main()
 9 {
10     vector<int> v;
11     
12     /*
13      * 將0-9存入vector容器並列印
14     */
15     for (int i=0; i<10; i++)
16         v.push_back(i);
17     cout << "輸出Vector容器:" << endl;
18     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
19         cout << *it << " ";
20     cout << endl << endl;
21 
22     // 給容器v配上容器介面卡
23     stack< int, vector<int> > s(v);
24     /*
25      * 使用棧容器介面卡stack提供的函式處理資料
26     */
27     cout << "自頂向下輸出棧( stack容器介面卡 ):" << endl;
28     while (!s.empty()) {
29         cout << s.top() << " ";
30         s.pop();
31     }
32     cout << endl;
33 
34     return 0;
35 }

       執行結果:

  

說明

       1. 容器介面卡只適用於一定的容器而不是所有容器。

       2. 容器介面卡的函式實現其實也是基於其引數容器的函式,而不是自己重新定義的。

相關文章