一.容器適配器
能夠用某種順序容器來實現(讓已有的順序容器以棧/隊列的方式工做)
1) stack: 頭文件 <stack>
• 棧 -- 後進先出
2) queue: 頭文件 <queue>
• 隊列 -- 先進先出
3) priority_queue: 頭文件 <queue>
• 優先級隊列 -- 最高優先級元素老是第一個出列
2ios
容器適配器都有3個成員函數:
• push: 添加一個元素;
• top: 返回棧頂部或隊頭元素的引用
• pop: 刪除一個元素
容器適配器上沒有迭代器
STL中各類排序, 查找, 變序等算法都不適合容器適配器
3
1.stack
stack 是後進先出的數據結構
只能插入, 刪除, 訪問棧頂的元素
可用 vector, list, deque來實現
• 缺省狀況下, 用deque實現
• 用 vector和deque實現, 比用list實現性能好
template<class T, class Cont = deque<T> >
class stack {
…
};
4
stack 中主要的三個成員函數:
• void push(const T & x);
將x壓入棧頂
• void pop();
彈出(即刪除)棧頂元素
• T & top();
返回棧頂元素的引用. 經過該函數, 能夠讀取棧頂
元素的值, 也能夠修改棧頂元素
5
2.queue
和stack 基本相似, 能夠用 list和deque實現
缺省狀況下用deque實現
template<class T, class Cont = deque<T> >
class queue {
……
};
一樣也有push, pop, top函數
• push發生在隊尾
• pop, top發生在隊頭, 先進先出
6
3.priority_queue
和 queue相似, 能夠用vector和deque實現
缺省狀況下用vector實現
priority_queue 一般用堆排序技術實現, 保證最大的元
素老是在最前面
• 執行pop操做時, 刪除的是最大的元素
• 執行top操做時, 返回的是最大元素的引用
默認的元素比較器是 less<T>
算法
1 #include <queue> 2 #include <iostream> 3 using namespace std; 4 int main() { 5 priority_queue<double> priorities; 6 priorities.push(3.2); 7 priorities.push(9.8); 8 priorities.push(5.4); 9 while( !priorities.empty() ) { 10 cout << priorities.top() << " "; 11 priorities.pop(); 12 } 13 return 0; 14 } //輸出結果: 9.8 5.4 3.2