SGI

queue<T, Sequence>

类别:容器、适配器 组件类型:类型

描述

一个queue是一个适配器,它提供了一组受限的 容器 功能。一个queue是一个“先进先出” (FIFO) 数据结构。 [1] 即,元素被添加到后面queue并且可以从前面移除;Q.front()是最早被添加到queue的元素队列不允许对其元素进行遍历。 [2]

队列是一个容器适配器,这意味着它是在某些基础容器类型的基础上实现的。默认情况下,该基础类型是deque,但可以选择一个不同的类型。

示例

int main() {
  queue<int> Q;
  Q.push(8);
  Q.push(7);
  Q.push(6);
  Q.push(2);
  
  assert(Q.size() == 4);
  assert(Q.back() == 2);

  assert(Q.front() == 8);
  Q.pop();

  assert(Q.front() == 7);
  Q.pop();

  assert(Q.front() == 6);
  Q.pop();
  
  assert(Q.front() == 2);
  Q.pop();

  assert(Q.empty());
}

定义

在标准头文件 queue 和非标准向后兼容头文件 stack.h 中定义。

模板参数

参数 描述 默认值
T 存储在队列中的对象的类型。  
序列 用于实现队列的基础容器类型。 deque<T>

模型

可分配默认构造

类型要求

公有基类

无。

成员

成员 定义位置 描述
value_type queue 见下文。
size_type queue 见下文。
queue() 默认构造 默认构造函数。创建一个空queue.
queue(const queue&) 可分配 复制构造函数。
queue& operator=(const queue&) 可分配 赋值运算符。
bool empty() const queue 见下文。
size_type size() const queue 见下文。
value_type& front() queue 见下文。
const value_type& front() const queue 见下文。
value_type& back() queue 见下文。
const value_type& back() const queue 见下文。
void push(const value_type&) queue 见下文。
void pop() [3] queue 见下文。
bool operator==(const queue&, const queue&) queue 见下文。
bool operator<(const queue&, const queue&) queue 见下文。

新成员

这些成员未在 可分配默认构造 要求中定义,但它们是特定于queue.
成员 描述
value_type 存储在queue中的对象类型。这与TSequence::value_type.
size_type 相同。一个无符号整数类型。这与Sequence::size_type.
bool empty() const 返回true如果queue不包含任何元素,且false否则。Q.empty()相当于Q.size() == 0.
size_type size() const 返回中包含的元素数量queue.
value_type& front() 返回对队列首部的元素的可变引用,即最近插入的元素。前置条件empty()false.
const value_type& front() const 返回对队列首部的元素的常量引用,即最近插入的元素。前置条件empty()false.
value_type& back() 返回对队列末尾的元素的可变引用,即最后插入的元素。前置条件empty()false.
const value_type& back() const 返回对队列末尾的元素的常量引用,即最后插入的元素。前置条件empty()false.
void push(const value_type& x) x队列末尾。后置条件size()将增加1,且back()将等于x.
void pop() 移除队列首部的元素。 [3] 前置条件empty()false。后置条件size()将减少1.
bool operator==(const queue&, const queue&) 比较两个队列是否相等。如果两个队列包含的元素数量相同且元素逐个相等,则两个队列相等。这是一个全局函数,而不是成员函数。
bool operator<(const queue&, const queue&) 两个队列的字典顺序。这是一个全局函数,而不是成员函数。

注释

[1] 队列是一种标准数据结构,在所有算法书籍中都讨论过。例如,请参见 Knuth 的 2.2.1 节。(D. E. Knuth,计算机编程的艺术。第 1 卷:基本算法,第二版。Addison-Wesley,1973 年。)

[2] 这个限制是存在的唯一原因。queue可用作队列;deque例如,具有成员函数front, back, push_front, push_back, pop_front,且pop_back使用容器适配器queue而不是容器deque的唯一原因是要明确说明您只执行队列操作,而不执行其他操作。

[3] 可能有人会想为什么pop()返回void,而不是value_type。也就是说,为什么必须使用front()pop()检查和移除queue首部的元素,而不是在单个成员函数中将这两者结合起来?事实上,这个设计的理由很充分。如果pop()返回前面元素,它必须通过值返回,而不是引用:通过引用返回会创建一个悬空指针。通过值返回,但是,效率低下:涉及至少一个冗余副本构造函数调用。因为不可能pop()以高效和准确的方式返回一个值,对于它来说,更明智的方式是不返回任何值,并要求客户端使用front()来检查queue.

的前面值

另请参阅, stack, deque, 容器, 顺序
[Silicon Surf] [STL Home]
版权 © 1999 Silicon Graphics, Inc.保留所有权利。 商标信息