1.queue概述
queue类模板可以实例化queue,即FIFO(先进先出)型队列。queue和stack的不同之处在于:queue是双端口的,元素压入时是从一端,元素移除时是从另一端;而stack是单端口的容器,元素的压入和移除均是从同一端口。通俗来讲,queue是典型的数据缓冲区结构。
若要使用queue,必须包含头文件<queue>。在头文件<queue>中,queue类模板的定义如下:
和stack一样,类模板声明中的第1个参数表示元素的型别;第2个参数用来定义队列内部用于存放元素的容器类别,其默认值为deque。最简单的queue实例化容器的例子如下:
实际上,queue型容器是单纯地把各项操作转化为内部容器的对应调用。可以使用任何序列式容器来支持queue,前提是该序列式容器要包括成员与函数:front()、back()、push_back()、pop_front()等即可。假定使用序列式list型容器来容纳元素,queue的声明形式可如下所示:
2.核心成员函数
queue的核心接口主要有成员函数push()、front()、back()及pop()构成。push()函数会将元素压入queue中;front()返回queue中的第1个元素;back()会返回queue中最后1个元素,pop()函数会从queue中移除一个元素。
和stack一样,queue型容器的成员函数pop()在移除元素时,并不返回该元素。front()和end()返回队列中对应的元素,但并不移除或移动该元素。
和stack一样,当queue型容器中的元素个数为0时,使用front()、back()和pop()函数会导致调用失败。在使用这些函数之前,最好先调用size()或empty()函数,判断容器是否为空。
3.使用queue型容器
下面主要讲述如何使用queue型容器,并使用两个例题进行详细的说明:一个例题用于阐述STL中queue的使用;另一个例题用于阐述如何使用自定义的队列。
例3-44
(www.xing528.com)
例3-44的执行效果如图3-45所示。
图3-45 例3-44的执行效果
例3-45用来说明自定义队列的使用。当然,STL中标准的queue型队列通常运行速度较快,在使用时,方便性和安全性均较高。但是程序员仍然可以根据自己的需求编写自定义式的队列。例3-45选自《C++标准程序库自修教程与参考手册》。
例3-45
例3-45的执行效果如图3-46所示。
图3-46 例3-45的执行效果
其中自定义模板类queue在头文件queue.cpp中。queue.cpp的源代码如下:
总结
本小节主要讲述了queue类模板的特性及其使用方法,最后讲述自定义队列的使用方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。