类别:容器、适配器 | 组件类型:类型 |
队列是一个容器适配器,这意味着它是在某些基础容器类型的基础上实现的。默认情况下,该基础类型是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()); }
参数 | 描述 | 默认值 |
---|---|---|
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 | 见下文。 |
成员 | 描述 |
---|---|
value_type | 存储在queue中的对象类型。这与T和Sequence::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.