淺談C++ STL queue 容器
本篇隨筆簡單介紹一下\(C++STL\)中\(queue\)容器的使用方法和常見的使用技巧。\(queue\)容器是\(C++STL\)的一種比較基本的容器。我們在學習這個容器的時候,不僅要學到這個容器具體的使用方法,更要從中體會\(C++STL\)的概念。
queue容器的概念
\(queue\)在英文中是隊列的意思。隊列是一種基本的數據結構。而\(C++STL\)中的隊列就是把這種數據結構模板化了。我們可以在腦中想象買票時人們站的排隊隊列。我們發現,在一個隊列中,只可以從隊首離開,從隊尾進來(沒有插隊,想啥呢)。即一個先進先出的數據結構。
上圖理解:

queue容器的聲明
\(queue\)容器存放在模板庫:#include<queue>里,使用前需要先開這個庫。
\(queue\)容器的聲明遵循\(C++STL\)的一般聲明原則:
容器類型<變量類型> 名稱
例:
#include<queue>
queue<int> q;
queue<char> q;
queue<pair<int,int> > q;
queue<node> q;
struct node{...};
queue容器的使用方法
\(queue\)容器的使用方法大致如下表所示:
| 用法 | 作用 |
|---|---|
q.front(),q.back() |
返回queue的首、尾元素 |
q.push() |
從queue末尾加入一個元素 |
q.size() |
返回queue當前的長度(大小) |
q.pop() |
從queue末尾刪除一個元素 |
q.empty() |
返回queue是否為空,1為空、0不為空 |
注意,雖然\(vector\)和\(queue\)是兩種最基本的\(STL\)容器,但請記住它們兩個不是完全一樣的。就從使用方法來講:
\(queue\)不支持隨機訪問,即不能像數組一樣地任意取值。並且,\(queue\)並不支持全部的\(vector\)的內置函數。比如\(queue\)不可以用\(clear()\)函數清空,清空\(queue\)必須一個一個彈出。同樣,\(queue\)也並不支持遍歷,無論是數組型遍歷還是迭代器型遍歷統統不支持,所以沒有\(begin(),end();\)函數,使用的時候一定要清楚異同!
