Namespaces
Variants

std:: queue

From cppreference.net
ヘッダーで定義 <queue>
template <

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

> class queue ;

std::queue クラステンプレートは、 コンテナアダプタ であり、 キュー の機能 - 具体的にはFIFO(先入れ先出し)データ構造を提供します。

このクラステンプレートは、基盤となるコンテナのラッパーとして機能します - 特定の関数セットのみが提供されます。キューは要素を基盤となるコンテナの末尾にプッシュし、先頭からポップします。

std::queueのすべてのメンバー関数は std::queue です constexpr :定数式の評価において std::queue オブジェクトを作成および使用することが可能です。

ただし、 std::queue オブジェクト自体は一般的に constexpr にはなりません。なぜなら、動的に確保されたストレージは同じ定数式の評価内で解放されなければならないためです。

(C++26以降)

目次

テンプレートパラメータ

T - 格納される要素の型。 T Container::value_type と同じ型でない場合、プログラムは不適格となる。
Container - 要素を格納するために使用される基盤となるコンテナの型。コンテナは SequenceContainer の要件を満たさなければならない。さらに、以下の関数を 通常の意味論 で提供しなければならない:

標準コンテナ std::deque および std::list はこれらの要件を満たす。

メンバー型

メンバー型 定義
container_type Container
value_type Container::value_type
size_type Container :: size_type
reference Container::reference
const_reference Container::const_reference

メンバーオブジェクト

メンバー名 定義
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)
(C++23)
末尾に要素の範囲を挿入する
(public member function)
(C++11)
末尾に要素をその場で構築する
(public member function)
先頭要素を削除する
(public member function)
(C++11)
内容を交換する
(public member function)

非メンバー関数

2つの queue の値を辞書順で比較する
(関数テンプレート)
std::swap アルゴリズムを特殊化する
(関数テンプレート)

ヘルパークラス

std::uses_allocator 型特性の特殊化
(クラステンプレートの特殊化)
std::queue の書式設定サポート
(クラステンプレートの特殊化)

推論ガイド

(C++17以降)

注記

機能テスト マクロ 標準 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナのためのレンジ構築と挿入
__cpp_lib_constexpr_queue 202502L (C++26) constexpr std::queue

#include <cassert>
#include <iostream>
#include <queue>
int main()
{
    std::queue<int> q;
    q.push(0); // backに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(); // 先頭要素の0を削除
    assert(q.size() == 3);
    // 全ての要素を表示して削除。std::queueはbegin()/end()をサポートしていないため、
    // 範囲ベースforループは使用できないことに注意
    std::cout << "q: ";
    for (; !q.empty(); q.pop())
        std::cout << q.front() << ' ';
    std::cout << '\n';
    assert(q.size() == 0);
}

出力:

q: 1 2 3

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 307 C++98 std::queue はプロキシ参照型を使用するコンテナをサポートしていなかった
( const ) value_type& の代わりに [1]
サポート済み
LWG 2566 C++98 Container::value_type の要件が欠落 T Container::value_type と同じ型でない場合は不適格
  1. std::vector<bool> のような追加で pop_front() をサポートするコンテナなど。このDRの解決により
    std::vector<bool> std::stack および std::priority_queue に対するサポートが追加された。 std::queue に関する変更は
    一貫性を維持するためのものである。

関連項目

コンテナを適応させて優先度付きキューを提供
(クラステンプレート)
両端キュー
(クラステンプレート)
双方向リンクリスト
(クラステンプレート)