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.