名稱空間
變體
操作

std::queue

來自 cppreference.com
< cpp‎ | 容器
定義於標頭檔案 <queue>
template<

    class T,
    class Container = std::deque<T>

> class queue;

std::queue 類模板是一個容器介面卡,提供佇列的功能——具體來說,是一個 FIFO(先進先出)資料結構。

該類模板作為底層容器的包裝器——只提供一組特定的函式。佇列將元素推入底層容器的後端,並從前端彈出。

std::queue 的所有成員函式都是 constexpr:可以在常量表達式的求值中建立和使用 std::queue 物件。

然而,std::queue 物件通常不能是 constexpr,因為任何動態分配的儲存都必須在同一常量表達式求值中釋放。

(C++26 起)

目錄

[編輯] 模板引數

T - 儲存元素的型別。如果 TContainer::value_type 不是同一型別,則程式格式錯誤。
Container(容器) - 用於儲存元素的底層容器的型別。該容器必須滿足SequenceContainer 的要求。此外,它必須提供具有常用語義的以下函式:

標準容器 std::dequestd::list 滿足這些要求。

[編輯] 成員型別

成員型別 定義
container_type Container[編輯]
value_type Container::value_type[編輯]
size_type Container::size_type[編輯]
reference Container::reference[編輯]
const_reference Container::const_reference[編輯]

[編輯] 成員物件

成員名稱 (Member name) 定義
Container c
底層容器
(protected member object) [編輯]

[編輯] 成員函式

構造 queue
(public member function) [編輯]
析構 queue
(public member function) [編輯]
向容器介面卡賦值
(public member function) [編輯]
元素訪問
訪問第一個元素
(public member function) [編輯]
訪問最後一個元素
(public member function) [編輯]
容量
檢查容器介面卡是否為空
(public member function) [編輯]
返回元素數量
(public member function) [編輯]
修改器
在末尾插入元素
(public member function) [編輯]
在末尾插入一系列元素
(public member function) [編輯]
(C++11)
在末尾就地構造元素
(public member function) [編輯]
移除首元素
(public member function) [編輯]
(C++11)
交換內容
(public member function) [編輯]

[編輯] 非成員函式

按字典順序比較兩個 queue 的值
(函式模板) [編輯]
特化 std::swap 演算法
(函式模板) [編輯]

[編輯] 輔助類

特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
std::queue 的格式化支援
(類模板特化) [編輯]

推導指引

(C++17 起)

[編輯] 注意

特性測試 標準 特性
__cpp_lib_containers_ranges 202202L (C++23) 容器的範圍構造和插入
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::queue

[編輯] 示例

#include <cassert>
#include <iostream>
#include <queue>
 
int main()
{
    std::queue<int> q;
 
    q.push(0); // back pushes 0
    q.push(1); // q = 0 1
    q.push(2); // q = 0 1 2
    q.push(3); // q = 0 1 2 3
 
    assert(q.front() == 0);
    assert(q.back() == 3);
    assert(q.size() == 4);
 
    q.pop(); // removes the front element, 0
    assert(q.size() == 3);
 
    // Print and remove all elements. Note that std::queue does not
    // support begin()/end(), so a range-for-loop cannot be used.
    std::cout << "q: ";
    for (; !q.empty(); q.pop())
        std::cout << q.front() << ' ';
    std::cout << '\n';
    assert(q.size() == 0);
}

輸出

q: 1 2 3

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 307 C++98 std::queue 不支援使用代理的容器
引用型別[1] 代替 (const) value_type&
支援
LWG 2566 C++98 缺少 Container::value_type 的要求 如果 TContainer::value_type 不是同一型別,則格式錯誤
  1. 例如類似於 std::vector<bool> 並且額外支援 pop_front() 的容器。此 DR 的解決方案
    std::stackstd::priority_queue 添加了 std::vector<bool> 的支援。涉及 std::queue 的更改
    是為了保持一致性。

[編輯] 參見

適配容器以提供優先順序佇列
(類模板) [編輯]
雙端佇列
(類模板) [編輯]
雙向連結串列
(類模板) [編輯]