文章目錄
- 一、queue的簡介
- 二、queue類常用接口
- 三、STL中queue類的模拟實作
一、queue的簡介
- 隊列是一種容器擴充卡,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素。
- 隊列作為容器擴充卡實作,容器擴充卡即将特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數來通路其元素。元素從隊尾入隊列,從隊頭出隊列。
- 底層容器可以是标準容器類模闆之一,也可以是其他專門設計的容器類。該底層容器應至少支援以下操作: empty:檢測隊列是否為空 、size:傳回隊列中有效元素的個數 、front:傳回隊頭元素的引用、 back:傳回隊尾元素的引用 、push_back:在隊列尾部入隊列、pop_front:在隊列頭部出隊列
- 标準容器類deque和list滿足了這些要求,而vector沒有pop_front這個接口,是以底層容器不能采用vector。預設情況下,如果沒有為queue執行個體化指定容器類,則使用标準容器deque。
以上内容來自:www.cplusplus.com queue類文檔的介紹,在STL的學習中,推薦大家看這個文檔,對每個類都有詳細的介紹。
入隊和出隊
二、queue類常用接口
函數名稱 | 功能說明 |
---|---|
queue() | 構造空的隊列 |
empty() | 檢測隊列是否為空,是傳回true,否則傳回false |
size() | 傳回隊列中有效元素的個數 |
front() | 傳回隊頭元素的引用 |
back() | 傳回隊尾元素的引用 |
push() | 在隊尾将元素val入隊列 |
pop() | 将隊頭元素出隊列 |
queue類常用接口應用
//std::queue<int> q;//構造函數
std::queue<int,std::list<int>> q;//構造函數
//MyQueue::queue<int,std::vector<int>> q; ---error 因為vector沒有pop_front這個接口
q.push(1);
q.push(2);
q.push(3);
q.push(4);
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
std::queue<int>q2(q); //拷貝構造函數
cout << q2.front() << endl; //1
cout << q2.back() << endl; //4
std::queue<int> q3;
q3=q; //指派運算符重載
queue容器擴充卡
queue 的底層容器預設是 deque 容器,是以模闆類型是
template <class T, class Container = deque<T> > class queue;
queue容器擴充卡的模闆有兩個參數,第一個參數是存儲對象的類型,第二個參數是底層容器的類型。另外,queue 的底層容器不可以使用
vector<T>
,因為vector沒有提供頭删
pop_front
的接口,不支援頭删。
三、STL中queue類的模拟實作
#include<deque>
#include<list>
namespace MyQueue
{
//template<class T, class Container = std::list<T>>
template<class T, class Container = std::deque<T>>
class queue
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
T& front()
{
return _con.front();
}
T& back()
{
return _con.back();
}
const T& front() const
{
return _con.front();
}
const T& back()const
{
return _con.back();
}
size_t size() const
{
return _con.size();
}
bool empty() const
{
return _con.empty();
}
private:
Container _con;
};
}