本篇随笔简单介绍一下\(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();\)函数,使用的时候一定要清楚异同!