首页 理论教育 C++STL队列类模板

C++STL队列类模板

时间:2023-10-25 理论教育 版权反馈
【摘要】:通俗来讲,queue是典型的数据缓冲区结构。和stack一样,queue型容器的成员函数pop()在移除元素时,并不返回该元素。当然,STL中标准的queue型队列通常运行速度较快,在使用时,方便性和安全性均较高。图3-46 例3-45的执行效果其中自定义模板类queue在头文件queue.cpp中。queue.cpp的源代码如下:总结本小节主要讲述了queue类模板的特性及其使用方法,最后讲述自定义队列的使用方法。

C++STL队列类模板

1.queue概述

queue类模板可以实例化queue,即FIFO(先进先出)型队列。queue和stack的不同之处在于:queue是双端口的,元素压入时是从一端,元素移除时是从另一端;而stack是单端口的容器,元素的压入和移除均是从同一端口。通俗来讲,queue是典型的数据缓冲区结构。

若要使用queue,必须包含头文件<queue>。在头文件<queue>中,queue类模板的定义如下:

978-7-111-51399-5-Chapter03-217.jpg

和stack一样,类模板声明中的第1个参数表示元素的型别;第2个参数用来定义队列内部用于存放元素的容器类别,其默认值为deque。最简单的queue实例化容器的例子如下:

978-7-111-51399-5-Chapter03-218.jpg

实际上,queue型容器是单纯地把各项操作转化为内部容器的对应调用。可以使用任何序列式容器来支持queue,前提是该序列式容器要包括成员与函数:front()、back()、push_back()、pop_front()等即可。假定使用序列式list型容器来容纳元素,queue的声明形式可如下所示:

978-7-111-51399-5-Chapter03-219.jpg

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

978-7-111-51399-5-Chapter03-220.jpg

978-7-111-51399-5-Chapter03-221.jpg(www.xing528.com)

例3-44的执行效果如图3-45所示。

978-7-111-51399-5-Chapter03-222.jpg

图3-45 例3-44的执行效果

例3-45用来说明自定义队列的使用。当然,STL中标准的queue型队列通常运行速度较快,在使用时,方便性和安全性均较高。但是程序员仍然可以根据自己的需求编写自定义式的队列。例3-45选自《C++标准程序库自修教程与参考手册》。

例3-45

978-7-111-51399-5-Chapter03-223.jpg

978-7-111-51399-5-Chapter03-224.jpg

例3-45的执行效果如图3-46所示。

978-7-111-51399-5-Chapter03-225.jpg

图3-46 例3-45的执行效果

其中自定义模板类queue在头文件queue.cpp中。queue.cpp的源代码如下:

978-7-111-51399-5-Chapter03-226.jpg

978-7-111-51399-5-Chapter03-227.jpg

总结

小节主要讲述了queue类模板的特性及其使用方法,最后讲述自定义队列的使用方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈