名前空間
変種
操作

std::queue

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダー<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と同じ型でない場合、プログラムは不正形式です。
コンテナ - 要素を格納するために使用する基になるコンテナの型。コンテナはシーケンスコンテナの要件を満たす必要があります。さらに、通常のセマンティクスを持つ次の関数を提供する必要があります。

標準コンテナのstd::dequestd::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 を構築する
(公開メンバ関数) [編集]
queue を破棄する
(公開メンバ関数) [編集]
コンテナアダプタに値を割り当てる
(公開メンバ関数) [編集]
要素アクセス
最初の要素にアクセスする
(public メンバ関数) [編集]
最後の要素にアクセスする
(public メンバ関数) [編集]
容量
コンテナアダプタが空かどうかをチェックする
(public メンバ関数) [編集]
要素数を返す
(public メンバ関数) [編集]
変更
末尾に要素を挿入する
(public member function) [編集]
末尾に要素の範囲を挿入する
(public member function) [編集]
(C++11)
末尾に要素をその場で構築する
(公開メンバ関数) [編集]
最初の要素を削除する
(public member function) [編集]
(C++11)
内容を交換する
(public メンバ関数) [編集]

[編集] 非メンバ関数

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

[編集] ヘルパークラス

std::uses_allocator 型特性を特殊化する
(クラス テンプレート特殊化) [edit]
std::queue の書式設定サポート
(class template specialization) [編集]

推論補助

(C++17以降)

[編集] ノート

機能テストマクロ 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナのRangeコンストラクタとRange挿入
__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++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 307 C++98 std::queue はプロキシを使用するコンテナをサポートしていなかった
参照型[1]を (const) value_type& の代わりに
サポート済み
LWG 2566 C++98 Container::value_typeの要件がありません TContainer::value_typeと同じ型でない場合、不正形式
  1. pop_front() の追加サポートを持つstd::vector<bool> に似たコンテナなど。この DR の解決により、std::stackstd::priority_queuestd::vector<bool> のサポートが追加されました。std::queue に関連する変更は、整合性を維持するためです。

[編集] 関連項目

コンテナを優先度付きキューとして提供するよう適合させる
(クラステンプレート) [編集]
両端キュー
(クラステンプレート) [編集]
双方向リンクリスト
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)