std:: deque
|
ヘッダーで定義
<deque>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (C++17以降) |
std::deque
(ダブルエンドキュー) は、先頭と末尾の両方で高速な挿入と削除を可能とするインデックス付きシーケンスコンテナです。さらに、デキューのどちらかの端での挿入と削除は、他の要素へのポインタや参照を決して無効化しません。
std::vector とは対照的に、dequeの要素は連続して格納されません:典型的な実装では、個別に割り当てられた固定サイズの配列のシーケンスと追加の簿記処理を使用します。これは、dequeへのインデックスアクセスが2回のポインタ間接参照を実行する必要があることを意味し、vectorのインデックスアクセスが1回のみ実行するのと比較されます。
dequeのストレージは必要に応じて自動的に拡張および縮小されます。dequeの拡張は、 std::vector の拡張よりもコストが低くなります。これは、既存の要素を新しいメモリ位置にコピーする必要がないためです。一方、dequeは通常、大きな最小メモリコストを持ちます。たとえば、1つの要素しか保持していないdequeでも、その内部配列全体を割り当てる必要があります(64ビットlibstdc++ではオブジェクトサイズの8倍、64ビットlibc++ではオブジェクトサイズの16倍または4096バイトのいずれか大きい方)。
デキューにおける一般的な操作の複雑性(効率)は以下の通りです:
- ランダムアクセス - 定数時間 O(1) 。
- 末尾または先頭への要素の挿入・削除 - 定数時間 O(1) 。
- 要素の挿入・削除 - 線形時間 O(n) 。
std::deque
は
Container
、
AllocatorAwareContainer
、
SequenceContainer
および
ReversibleContainer
の要件を満たします。
std::dequeのすべてのメンバー関数は
std::deque
constexpr
です:定数式の評価において
std::deque
オブジェクトを作成して使用することが可能です。
ただし、
|
(C++26以降) |
目次 |
テンプレートパラメータ
| T | - |
要素の型。
|
||||
| Allocator | - |
メモリの取得/解放およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は
Allocator
の要件を満たさなければならない。
動作は未定義
(C++20以前)
プログラムは不適格
(C++20以降)
となる(
Allocator::value_type
が
T
と同じでない場合)。
|
イテレータの無効化
|
このセクションは不完全です
理由: このセクションにはまだいくつかの不正確な点があります。詳細については個々のメンバー関数のページを参照してください |
| 操作 | 無効化されるもの | ||||
|---|---|---|---|---|---|
| すべての読み取り専用操作 | 無効化されない | ||||
| swap , std::swap | 末尾の次のイテレータが無効化される可能性あり(実装定義) | ||||
|
shrink_to_fit
,
clear
,
insert
,
emplace , push_front , push_back , emplace_front , emplace_back |
常に無効化される | ||||
| erase |
先頭で削除する場合 - 削除された要素のみ
末尾で削除する場合 - 削除された要素と末尾の次のイテレータ
|
||||
| resize |
新しいサイズが古いサイズより小さい場合 - 削除された要素と
末尾の次のイテレータのみ
新しいサイズが古いサイズより大きい場合 - すべてのイテレータが無効化される
|
||||
| pop_front , pop_back |
削除された要素に対して
|
無効化に関する注記
- dequeの両端に挿入する場合、参照は insert および emplace によって無効化されません。
- push_front 、 push_back 、 emplace_front および emplace_back は、dequeの要素への参照を一切無効化しません。
- dequeの両端で削除する場合、削除されない要素への参照は erase 、 pop_front および pop_back によって無効化されません。
- より小さいサイズでの resize の呼び出しは、削除されない要素への参照を一切無効化しません。
- より大きいサイズでの resize の呼び出しは、dequeの要素への参照を一切無効化しません。
メンバー型
| メンバー型 | 定義 | ||||
value_type
|
T
|
||||
allocator_type
|
Allocator
|
||||
size_type
|
符号なし整数型(通常は std::size_t ) | ||||
difference_type
|
符号付き整数型(通常は std::ptrdiff_t ) | ||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
LegacyRandomAccessIterator
かつ
ConstexprIterator
(C++26以降)
で
value_type
を指す
|
||||
const_iterator
|
LegacyRandomAccessIterator かつ ConstexprIterator (C++26以降) で const value_type を指す | ||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
メンバー関数
deque
を構築する
(公開メンバ関数) |
|
deque
を破棄する
(public member function) |
|
|
コンテナに値を代入する
(公開メンバ関数) |
|
|
コンテナに値を割り当てる
(公開メンバ関数) |
|
|
(C++23)
|
コンテナに値の範囲を割り当てる
(公開メンバ関数) |
|
関連付けられたアロケータを返す
(公開メンバ関数) |
|
要素アクセス |
|
|
境界チェック付きで指定された要素にアクセス
(公開メンバ関数) |
|
|
指定された要素にアクセス
(公開メンバ関数) |
|
|
最初の要素にアクセスする
(公開メンバ関数) |
|
|
最後の要素にアクセスする
(public member function) |
|
イテレータ |
|
|
(C++11)
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
終端を指すイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
先頭を指す逆方向イテレータを返す
(public member function) |
|
(C++11)
|
末尾を指す逆方向イテレータを返す
(公開メンバ関数) |
容量 |
|
|
コンテナが空かどうかをチェックする
(公開メンバ関数) |
|
|
要素数を返す
(公開メンバ関数) |
|
|
要素の最大可能数を返す
(public member function) |
|
|
(
DR*
)
|
未使用のメモリを解放してメモリ使用量を削減します
(公開メンバー関数) |
修飾子 |
|
|
内容をクリアする
(公開メンバ関数) |
|
|
要素を挿入する
(public member function) |
|
|
(C++23)
|
要素の範囲を挿入する
(公開メンバ関数) |
|
(C++11)
|
要素をその場で構築する
(公開メンバ関数) |
|
要素を削除する
(公開メンバ関数) |
|
|
末尾に要素を追加する
(public member function) |
|
|
(C++11)
|
要素をその場で末尾に構築する
(公開メンバ関数) |
|
(C++23)
|
末尾に要素の範囲を追加する
(公開メンバ関数) |
|
最後の要素を削除する
(公開メンバ関数) |
|
|
先頭に要素を挿入する
(公開メンバ関数) |
|
|
(C++11)
|
先頭に要素をその場で構築する
(公開メンバ関数) |
|
(C++23)
|
先頭に要素の範囲を追加する
(public member function) |
|
先頭要素を削除する
(公開メンバ関数) |
|
|
格納されている要素の数を変更する
(公開メンバ関数) |
|
|
内容を交換する
(公開メンバ関数) |
|
非メンバー関数
|
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20)
|
2つの
deque
の値を辞書順で比較する
(関数テンプレート) |
|
std::swap
アルゴリズムを特殊化する
(関数テンプレート) |
|
|
特定の条件を満たすすべての要素を削除する
(関数テンプレート) |
推論ガイド |
(C++17以降) |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | コンテナのためのレンジ構築と挿入 |
__cpp_lib_constexpr_deque
|
202502L
|
(C++26) |
constexpr
std::deque
|
例
出力:
13 7 5 16 8 25
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 230 | C++98 |
T
は
CopyConstructible
であることが要求されていなかった
(型
T
の要素が構築できない可能性があった)
|
T
も
CopyConstructible であることが要求される |
関連項目
|
コンテナをキュー(FIFOデータ構造)として提供するように適合させる
(クラステンプレート) |