std::queue
From cppreference.com
| ヘッダー <queue>で定義されています |
||
| template< class T, |
||
std::queue クラステンプレートは、キュー、特に FIFO (先入れ先出し) データ構造の機能を提供するコンテナアダプタです。
クラステンプレートは、基になるコンテナのラッパーとして機能し、特定の関数セットのみが提供されます。キューは要素を基になるコンテナの末尾にプッシュし、先頭からポップします。
|
|
(C++26以降) |
目次 |
[編集] テンプレートパラメータ
| T | - | 格納される要素の型です。TがContainer::value_typeと同じ型でない場合、プログラムは不正形式です。 |
| コンテナ | - | 要素を格納するために使用する基になるコンテナの型。コンテナはシーケンスコンテナの要件を満たす必要があります。さらに、通常のセマンティクスを持つ次の関数を提供する必要があります。
標準コンテナの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 を構築する(公開メンバ関数) | |
queue を破棄する(公開メンバ関数) | |
| コンテナアダプタに値を割り当てる (公開メンバ関数) | |
要素アクセス | |
| 最初の要素にアクセスする (public メンバ関数) | |
| 最後の要素にアクセスする (public メンバ関数) | |
容量 | |
| コンテナアダプタが空かどうかをチェックする (public メンバ関数) | |
| 要素数を返す (public メンバ関数) | |
変更 | |
| 末尾に要素を挿入する (public member function) | |
| (C++23) |
末尾に要素の範囲を挿入する (public member function) |
| (C++11) |
末尾に要素をその場で構築する (公開メンバ関数) |
| 最初の要素を削除する (public member function) | |
| (C++11) |
内容を交換する (public メンバ関数) |
[編集] 非メンバ関数
2つの queue の値を辞書順に比較する(関数テンプレート) | |
| (C++11) |
std::swap アルゴリズムを特殊化する (関数テンプレート) |
[編集] ヘルパークラス
| std::uses_allocator 型特性を特殊化する (クラス テンプレート特殊化) | |
| (C++23) |
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の要件がありません |
TがContainer::value_typeと同じ型でない場合、不正形式 |
- ↑
pop_front()の追加サポートを持つstd::vector<bool> に似たコンテナなど。この DR の解決により、std::stack と std::priority_queue の std::vector<bool> のサポートが追加されました。std::queueに関連する変更は、整合性を維持するためです。
[編集] 関連項目
| コンテナを優先度付きキューとして提供するよう適合させる (クラステンプレート) | |
| 両端キュー (クラステンプレート) | |
| 双方向リンクリスト (クラステンプレート) |