queue

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

语法

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

参数

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

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

备注

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

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

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

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

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

  • queue 类支持先进先出 (FIFO) 数据结构。 可以在脑海中将其类比为排队等候银行柜员的人。 元素(人)可从行的后部添加,并且可以从行的前部删除。 行的前部和后部都可以插入。 以这种方式限制仅访问 frontback 元素是使用 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++ 标准库参考