queue 操作queue 和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同:
queue 的生成方式和 stack 相同,下面展示如何创建一个保存字符串对象的 queue:
顾客
queue 也没有迭代器。例如:和 stack 一样,访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素。
为了模拟超市结账,我们需要有随机数生成的功能。因此打算使用 random 头文件中的一个非常简单的工具,但不打算深入解释它。我们会在教程后面的章节深入探讨 random 头文件中的内容。程序使用了一个 uniform_int_distribution() 类型的实例。顾名思义,它定义的整数值在最大值和最小值之间均匀分布。在均匀分布中,所有这个范围内的值都可能相等。可以在 10 和 100 之间定义如下分布:
输入的唯一数字是 checkouts。此处选择将模拟持续时间设置为 600 分钟,也可以用参数输入这个时间。main() 函数生成了顾客服务时间,超市开门时等在门外的顾客数,以及顾客到达时间间隔的分布对象。它表明顾客在同一时间到达。我们可以轻松地将这个程序扩展为每次到达的顾客数是一个处于一定范围内的随机数。
许多程序都使用了 queue 容器。queue 容器可以用来表示超市的结账队列或服务器上等待执行的数据库事务队列。对于任何需要用 FIFO 准则处理的序列来说,使用 queue 容器适配器都是好的选择。
queueT 模板定义了拷贝和移动版的 operator=(),对于所保存元素类型相同的 queue 对象,它们有一整套的比较运算符,这些运算符的工作方式和 stack 容器相同。
直接使用 using 指令可以减少代码输入,简化代码。顾客服务次数记录在 vector 中。服务时间减去 service_times 的最小值可以用来索引需要自增的 vector 元素,这导致 vector 的第一个元素会记录下最少服务时间的发生次数。histogram() 函数会以水平条形图的形式生成每个服务时间出现次数的柱状图。
超市的每个结账柜台都有一队排队等待的顾客。Checkout.h 中定义的 Checkout 类如下:
std::uniform_int_distribution d {10, 100};这里只定义了分布对象 d,它指定了整数值分布的范围。为了获取这个范围内的随机数,我们需要使用一个随机数生成器,然后把它作为参数传给 d 的调用运算符,从而返回一个随机整数。 random 头文件中定义了几种随机数生成器。这里我们使用最简单的一个,可以按如下方式定义:
queue 容器的实际使用这里汇集了一些使用 queue 容器的示例。这是一个用 queue 模拟超市运转的程序。结账队列的长度是超市运转的关键因素。它会影响超市可容纳的顾客数因为太长的队伍会使顾客感到气馁,从而放弃排队。在很多情形中医院可用病床数会严重影响应急处理设施的运转,也会产生同样的队列问题。我们的超市模拟是一个简单模型,灵活性有限。
近期评论