queue 类

一个模板容器适配器类,它提供功能的限制,限制对一些基本容器类型的前端和后端元素的访问权限。 可以在后端添加或从前端移除元素,并且可以在 queue 的任何一端检查元素。

语法

template <class Type, class Container = deque <Type>>
class queue

参数

Type
要在 queue 中存储的元素数据类型。

Container
用来实现 queue 的基础容器的类型。

备注

queue 对象的第一个模板参数中规定的 Type 类的元素与 value_type 同义,并且必须与第二个模板参数规定的基础容器类 Container 中的元素类型相匹配。 Type 必须是可赋值的,这样才能复制该类型的对象并为该类型的变量赋值。

适合 queue 的基础容器类包括 deque 和 list 或者支持front、back、push_back 和 pop_front 操作的任何其他序列容器。 基础容器类封装在容器适配器中,容器适配器仅公开一组有限的序列容器成员函数为公共接口。

当且仅当 Type 类的元素可进行相等比较时,queue 对象才可进行相等比较,当且仅当 Type 类的元素可进行小于比较时,queue 对象才可进行小于比较。

C++ 标准库定义了三种类型的容器适配器:stack、queue 和 priority_queue。 每种适配器都限制了一些基础容器类的功能,以便对标准数据结构提供精确控制的接口。

  • stack 类支持后进先出 (LIFO) 数据结构。 可以在脑海中将其类比为一摞盘子。 元素(盘子)只能从堆栈顶部(基容器末尾的最后一个元素)插入、检查或删除。 限制仅访问顶部元素是使用 stack 类的原因。

  • queue 类支持先进先出 (FIFO) 数据结构。 可以在脑海中将其类比为排队等候银行柜员的人。 元素(人)可从行的后部添加,并且可以从行的前部删除。 行的前部和后部都可以插入。 以这种方式限制仅访问 front 和 back 元素是使用 queue 类的原因。

  • priority_queue 类将对其元素进行排序,以便最大的元素始终位于顶部位置。 它支持元素的插入以及顶部元素的检查和删除。 可以在脑海中将其类比为按年龄、身高或其他标准排队的人。

成员

构造函数

名称 描述
queue 构造一个空的或者是基容器对象副本的 queue。

Typedef

名称 描述
container_type 一种类型,它提供将由 queue 采用的基容器。
size_type 可表示 queue 中元素数量的无符号整数类型。
value_type 一种类型,它表示存储为 queue 中元素的对象的类型。

函数

名称 描述
back 返回对在 queue 后部最近添加的最后一个元素的引用。
empty 测试 queue 是否为空。
front 返回对 queue 前部的第一个元素的引用。
pop 从 queue 前端移除一个元素。
push 将元素添加到 queue 的后部。
size 返回 queue 中的元素数量。

back

返回对在 queue 后部最近添加的最后一个元素的引用。

reference back();

const_reference back() const;

返回值

queue 的最后一个元素。 如果 queue 为空,则返回值不确定。

备注

如果将 back 的返回值分配给 const_reference,则无法修改 queue 对象。 如果将 back 的返回值分配给 reference,则可以修改 queue 对象。

当使用定义为 1 或 2 的 _ITERATOR_DEBUG_LEVEL 进行编译时,如果试图访问空 queue 中的元素,则将发生运行时错误。 有关更多信息,请参阅经过检查的迭代器。

示例

// queue_back.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 11 );

   int& i = q1.back( );
   const int& ii = q1.front( );

   cout << "The integer at the back of queue q1 is " << i
        << "." << endl;
   cout << "The integer at the front of queue q1 is " << ii
        << "." << endl;
}

container_type

一种类型,它提供将调整的基容器。

typedef Container container_type;

备注

该类型是模板参数 Container 的同义词。 两个 C++ 标准库序列容器类(list 类和默认 deque 类)满足用作 queue 对象的基容器的要求。 也可能使用满足要求的用户定义的类型。

有关 Container 的详细信息,请参阅 queue Class 主题的备注部分。

示例

有关如何声明和使用 container_type 的示例,请参阅 queue 的示例。

empty

测试 queue 是否为空。

bool empty() const;

返回值

如果 queue 为空,则返回 true;如果 queue 不为空,则返回 false。

示例

// queue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
using namespace std;

   // Declares queues with default deque base container
   queue <int> q1, q2;

   q1.push( 1 );

   if ( q1.empty( ) )
      cout << "The queue q1 is empty." << endl;
   else
      cout << "The queue q1 is not empty." << endl;

   if ( q2.empty( ) )
      cout << "The queue q2 is empty." << endl;
   else
      cout << "The queue q2 is not empty." << endl;
}
The queue q1 is not empty.
The queue q2 is empty.

front

返回对 queue 前部的第一个元素的引用。

reference front();

const_reference front() const;

返回值

queue 的第一个元素。 如果 queue 为空,则返回值不确定。

备注

如果将 front 的返回值分配给 const_reference,则无法修改 queue 对象。 如果将 front 的返回值分配给 reference,则可以修改 queue 对象。

成员函数返回对受控序列的第一个元素的reference,该元素必须为非空。

当使用定义为 1 或 2 的 _ITERATOR_DEBUG_LEVEL 进行编译时,如果试图访问空 queue 中的元素,则将发生运行时错误。 有关更多信息,请参阅经过检查的迭代器。

示例

// queue_front.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main() {
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   int& ii = q1.back( );
   int& iii = q1.front( );

   cout << "The integer at the back of queue q1 is " << ii
        << "." << endl;
   cout << "The integer at the front of queue q1 is " << iii
        << "." << endl;
}

pop

从 queue 前端移除一个元素。

void pop();

备注

queue 不能为空,以便应用成员函数。 queue 的顶部是最近添加的元素所占据的位置,并且是容器末尾处的最后一个元素。

示例

// queue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1, s2;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   i = q1.front( );
   cout << "The element at the front of the queue is "
        << i << "." << endl;

   q1.pop( );

   i = q1.size( );
   cout << "After a pop the queue length is "
        << i << "." << endl;

   i = q1. front ( );
   cout << "After a pop, the element at the front of the queue is "
        << i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
After a pop the queue length is 2.
After a pop, the element at the front of the queue is 20.

push

将元素添加到 queue 的后部。

void push(const Type& val);

参数

val
添加到 queue 后部的元素。

注解

queue 的后部是最近添加的元素所占据的位置,并且是容器末尾处的最后一个元素。

示例

// queue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1;

   q1.push( 10 );
   q1.push( 20 );
   q1.push( 30 );

   queue <int>::size_type i;
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   i = q1.front( );
   cout << "The element at the front of the queue is "
        << i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.

queue

构造一个空的或者是基容器对象副本的 queue。

queue();

explicit queue(const container_type& right);

参数

right
所构造 queue 要作为其副本的 const 容器。

备注

queue 的默认基容器是 deque。 还可以指定 list 作为基容器,但不能指定 vector,因为它缺少所需的 pop_front 成员函数。

示例

// queue_queue.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <list>
#include <iostream>

int main( )
{
   using namespace std;

   // Declares queue with default deque base container
   queue <char> q1;

   // Explicitly declares a queue with deque base container
   queue <char, deque<char> > q2;

   // These lines don't cause an error, even though they
   // declares a queue with a vector base container
   queue <int, vector<int> > q3;
   q3.push( 10 );
   // but the following would cause an error because vector has
   // no pop_front member function
   // q3.pop( );

   // Declares a queue with list base container
   queue <int, list<int> > q4;

   // The second member function copies elements from a container
   list<int> li1;
   li1.push_back( 1 );
   li1.push_back( 2 );
   queue <int, list<int> > q5( li1 );
   cout << "The element at the front of queue q5 is "
        << q5.front( ) << "." << endl;
   cout << "The element at the back of queue q5 is "
        << q5.back( ) << "." << endl;
}
The element at the front of queue q5 is 1.
The element at the back of queue q5 is 2.

size

返回 queue 中的元素数量。

size_type size() const;

返回值

queue 的当前长度。

示例

// queue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
   using namespace std;
   queue <int> q1, q2;
   queue <int>::size_type i;

   q1.push( 1 );
   i = q1.size( );
   cout << "The queue length is " << i << "." << endl;

   q1.push( 2 );
   i = q1.size( );
   cout << "The queue length is now " << i << "." << endl;
}
The queue length is 1.
The queue length is now 2.

size_type

可表示 queue 中元素数量的无符号整数类型。

typedef typename Container::size_type size_type;

注解

该类型是由 queue 调整的基容器的 size_type 的同义词。

示例

有关如何声明和使用 size_type 的示例,请参阅 queue::front 的示例。

value_type

一种类型,它表示存储为 queue 中元素的对象的类型。

typedef typename Container::value_type value_type;

备注

该类型是由 queue 调整的基容器的 value_type 的同义词。

示例

// queue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>

int main( )
{
using namespace std;

   // Declares queues with default deque base container
   queue<int>::value_type AnInt;

   AnInt = 69;
   cout << "The value_type is AnInt = " << AnInt << endl;

   queue<int> q1;
   q1.push(AnInt);
   cout << "The element at the front of the queue is "
        << q1.front( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the front of the queue is 69.

另请参阅

C++ 标准库中的线程安全
C++ 标准库参考