前言
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. 容器介面卡的函式實現其實也是基於其引數容器的函式,而不是自己重新定義的。