名前空間
変種
操作

std::stack

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダ <stack> で定義
template<

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

> class stack;

std::stack クラスは、プログラマーに スタック の機能、特に LIFO (後入れ先出し) データ構造の機能を提供する コンテナアダプタ です。

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

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

ただし、動的に割り当てられたストレージは同じ定数式評価で解放する必要があるため、std::stack オブジェクトは一般的に constexpr にすることはできません。

(C++26以降)

目次

[編集] テンプレートパラメータ

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

標準コンテナ std::vector (std::vector<bool> を含む)、std::deque、および std::list はこれらの要件を満たします。デフォルトでは、特定のスタッククラスのインスタンス化に対してコンテナクラスが指定されていない場合、標準コンテナ std::deque が使用されます。

[編集] メンバ型

定義
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) [編集]

[編集] メンバ関数

stack を構築する
(公開メンバ関数) [編集]
stack を破棄する
(公開メンバ関数) [編集]
コンテナアダプタに値を割り当てる
(公開メンバ関数) [編集]
要素アクセス
トップ要素にアクセスする
(public member function) [編集]
容量
コンテナアダプタが空かどうかをチェックする
(public メンバ関数) [編集]
要素数を返す
(public メンバ関数) [編集]
変更
要素をトップに挿入する
(public member function) [編集]
要素の範囲をトップに挿入する
(public member function) [編集]
(C++11)
要素をトップにインプレースで構築する
(公開メンバ関数) [編集]
トップ要素を削除する
(public member function) [編集]
(C++11)
内容を交換する
(public メンバ関数) [編集]

[編集] 非メンバ関数

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

[編集] ヘルパークラス

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

推論補助

(C++17以降)

[編集] 備考

機能テストマクロ 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナのRangeコンストラクタとRange挿入
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::stack

[編集]

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 307 C++98 Containerstd::vector<bool> にできない 許可
LWG 2566 C++98 Container::value_typeの要件がありません TContainer::value_typeと同じ型でない場合、不正形式

[編集] 関連項目

リサイズ可能な連続配列
(クラステンプレート) [編集]
空間効率の良い動的ビットセット
(class template specialization) [編集]
両端キュー
(クラステンプレート) [編集]
双方向リンクリスト
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)