跳到主要内容
注意

请注意,本文尚未完成!您可以通过编辑此文档页面来提供帮助。

概述

template< class T, /* ... */ >
class queue;

队列是一个容器适配器——它通过提供新的接口来适配容器。

新接口是一种 FIFOFirst In First Out,先进先出)数据结构。这意味着第一个被推入的元素是第一个被访问的元素(就像商店排队一样——第一个进入的人是第一个被服务的人)。

队列的技术定义

std::queue 类是一个容器适配器,它为程序员提供了队列的功能——特别是 FIFO(先进先出)数据结构。

类模板充当底层容器的包装器——只提供一组特定的函数。队列将元素推入底层容器的尾部,并从头部弹出元素。

std::queue

定义于队列

模板参数

pubT

存储元素的类型。

危险

如果 T 不是 Container::value_type,则行为未定义。

pub容器

用于存储元素的底层容器类型。默认为 std::deque<T>

容器必须满足 SequenceContainer
此外,它必须提供具有通常语义的以下函数

  • back()
  • front()
  • push_back()
  • pop_front()

标准容器 std::dequestd::list 满足这些要求。

类型名称

pub容器类型容器
pubvalue_typeContainer::value_type
pubsize_typeContainer::size_type
pubreferenceContainer::reference
pubconst_referenceContainer::const_reference

成员函数

pub(构造函数)

构造一个 queue

pub(析构函数)

销毁一个 queue

puboperator=将一个队列赋值给另一个队列。

元素访问

pubfront访问顶部元素(第一个推入的)。
pub末尾访问尾部元素(最后一个推入的)。

容量

pubempty如果队列为空,返回 true,否则返回 false
pubsize返回队列中的元素数量。

修饰符

pubpush在末尾插入一个新元素。
pubemplace (C++11 起)在末尾就地构造一个新元素。
pubpop移除第一个推入的元素(即 queue.front() 将返回的元素)。
pubswap (自 C++11 起)交换两个队列。

成员对象

保护Container C底层容器。默认为 std::deque<T>

非成员函数

puboperator==
operator!=
operator<
operator>
operator<=
operator>=
operator<=> (C++20)
按字典顺序比较队列中的值。
pubstd::swap (std::queue)std::swap 算法的重载。

辅助类

pubstd::uses_allocator (std::queue)特化 std::uses_allocator 类型特征。

推导指南 (C++17 起)

点击展开
// (1)
template< class Container >
queue( Container )
-> queue<typename Container::value_type, Container>;
// (2)
template< class Container, class Alloc >
queue( Container, Alloc )
-> queue<typename Container::value_type, Container>;

(1)(2) 允许从底层容器类型推导

(2) 使用 std::deque<typename std::iterator_traits<InputIt>::value_type> 作为底层容器类型(见(4)

// (3) (since C++23)
template< class InputIt >
queue( InputIt, InputIt )
-> queue<typename std::iterator_traits<InputIt>::value_type>;
// (4) (since C++23)
template< class InputIt, class Alloc >
queue( InputIt, InputIt, Alloc )
-> queue<typename std::iterator_traits<InputIt>::value_type,
std::deque<typename std::iterator_traits<InputIt>::value_type, Alloc>>;

(3)(4) 允许从迭代器范围推导

重载决议

为了使任何推导指南参与重载决议,必须满足以下要求

注意

库确定类型不满足 LegacyInputIterator 的程度是未指定的,但至少

  • 整型不符合输入迭代器的条件。

同样,它确定类型不满足 Allocator 的程度是未指定的,但至少

示例

基本操作

队列的推入和弹出,打印值
#include <iostream>
#include <queue>

int main()
{
std::priority_queue<int> q;

queue.push(1);
queue.push(2);
queue.push(3);

while (!queue.empty()) {
std::cout << queue.top() << '\n';
queue.pop();
}
}
结果
1
2
3
本文档源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。
注意

请注意,本文尚未完成!您可以通过编辑此文档页面来提供帮助。

概述

template< class T, /* ... */ >
class queue;

队列是一个容器适配器——它通过提供新的接口来适配容器。

新接口是一种 FIFOFirst In First Out,先进先出)数据结构。这意味着第一个被推入的元素是第一个被访问的元素(就像商店排队一样——第一个进入的人是第一个被服务的人)。

队列的技术定义

std::queue 类是一个容器适配器,它为程序员提供了队列的功能——特别是 FIFO(先进先出)数据结构。

类模板充当底层容器的包装器——只提供一组特定的函数。队列将元素推入底层容器的尾部,并从头部弹出元素。

std::queue

定义于队列

模板参数

pubT

存储元素的类型。

危险

如果 T 不是 Container::value_type,则行为未定义。

pub容器

用于存储元素的底层容器类型。默认为 std::deque<T>

容器必须满足 SequenceContainer
此外,它必须提供具有通常语义的以下函数

  • back()
  • front()
  • push_back()
  • pop_front()

标准容器 std::dequestd::list 满足这些要求。

类型名称

pub容器类型容器
pubvalue_typeContainer::value_type
pubsize_typeContainer::size_type
pubreferenceContainer::reference
pubconst_referenceContainer::const_reference

成员函数

pub(构造函数)

构造一个 queue

pub(析构函数)

销毁一个 queue

puboperator=将一个队列赋值给另一个队列。

元素访问

pubfront访问顶部元素(第一个推入的)。
pub末尾访问尾部元素(最后一个推入的)。

容量

pubempty如果队列为空,返回 true,否则返回 false
pubsize返回队列中的元素数量。

修饰符

pubpush在末尾插入一个新元素。
pubemplace (C++11 起)在末尾就地构造一个新元素。
pubpop移除第一个推入的元素(即 queue.front() 将返回的元素)。
pubswap (自 C++11 起)交换两个队列。

成员对象

保护Container C底层容器。默认为 std::deque<T>

非成员函数

puboperator==
operator!=
operator<
operator>
operator<=
operator>=
operator<=> (C++20)
按字典顺序比较队列中的值。
pubstd::swap (std::queue)std::swap 算法的重载。

辅助类

pubstd::uses_allocator (std::queue)特化 std::uses_allocator 类型特征。

推导指南 (C++17 起)

点击展开
// (1)
template< class Container >
queue( Container )
-> queue<typename Container::value_type, Container>;
// (2)
template< class Container, class Alloc >
queue( Container, Alloc )
-> queue<typename Container::value_type, Container>;

(1)(2) 允许从底层容器类型推导

(2) 使用 std::deque<typename std::iterator_traits<InputIt>::value_type> 作为底层容器类型(见(4)

// (3) (since C++23)
template< class InputIt >
queue( InputIt, InputIt )
-> queue<typename std::iterator_traits<InputIt>::value_type>;
// (4) (since C++23)
template< class InputIt, class Alloc >
queue( InputIt, InputIt, Alloc )
-> queue<typename std::iterator_traits<InputIt>::value_type,
std::deque<typename std::iterator_traits<InputIt>::value_type, Alloc>>;

(3)(4) 允许从迭代器范围推导

重载决议

为了使任何推导指南参与重载决议,必须满足以下要求

注意

库确定类型不满足 LegacyInputIterator 的程度是未指定的,但至少

  • 整型不符合输入迭代器的条件。

同样,它确定类型不满足 Allocator 的程度是未指定的,但至少

示例

基本操作

队列的推入和弹出,打印值
#include <iostream>
#include <queue>

int main()
{
std::priority_queue<int> q;

queue.push(1);
queue.push(2);
queue.push(3);

while (!queue.empty()) {
std::cout << queue.top() << '\n';
queue.pop();
}
}
结果
1
2
3
本文档源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。