• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <stack>

    std::stack

    namespace std {
      template <class T, class Container = deque<T>>
      class stack;
    }
    

    概要

    stack はコンテナアダプタであり、LIFO (last-in first-out) の動作――コンテナの一方から要素が挿入され、挿入された側から要素を取り出す――を実現する目的で設計されている。要素をコンテナの back() 側から挿入し、同じく back() 側から取り出す。

    stack は、所定のメンバ関数を持つコンテナのオブジェクトを内部実装として用いており、標準のコンテナ、もしくは独自に実装したコンテナを指定することができる。 このコンテナに必要な要件は、以下のメンバ関数を持つことである。

    • back()
    • push_back()
    • pop_back()
    • emplace_back() (C++11)

    この要件を満たすものとしては vectordequelist があり、デフォルトでは deque が使用される。

    stack は2つのテンプレートパラメータを持つ。各テンプレートパラメータの意味は以下の通りである。

    • T: 格納される要素の型
    • Container: 要素へのアクセス・保存に用いる内部実装のコンテナクラス

    メンバ関数

    名前 説明 対応バージョン
    (constructor) コンストラクタ
    (destructor) デストラクタ
    operator= 代入
    top 次の要素へアクセスする
    empty 要素が空であるかを確認する
    size 要素数を取得する
    push 要素を追加する
    push_range Rangeの要素を追加する C++23
    emplace 直接構築で要素を追加する C++11
    pop 次の要素を削除する
    swap 他の stack オブジェクトと値を入れ替える C++11

    protectedメンバ変数

    変数名 対応バージョン
    c Container

    メンバ型

    名前 説明 対応バージョン
    container_type Container
    value_type Container::value_type
    size_type Container::size_type
    reference Container::reference C++11
    const_reference Container::const_reference C++11

    非メンバ関数

    名前 説明 対応バージョン
    operator== 等値比較
    operator!= 非等値比較
    operator<=> 三方比較 C++20
    operator< 左辺が右辺より小さいかの判定を行う
    operator<= 左辺が右辺以下かの判定を行う
    operator> 左辺が右辺より大きいかの判定を行う
    operator>= 左辺が右辺以上かの判定を行う
    swap 2つのstackオブジェクトを入れ替える C++11

    推論補助

    名前 説明 対応バージョン
    (deduction_guide) クラステンプレートの推論補助 C++17

    #include <iostream>
    #include <stack>
    
    int main ()
    {
      std::stack<int> st;
    
      // 要素を追加
      st.push(1);
      st.push(2);
      st.push(3);
    
      while (!st.empty()) {
        std::cout << st.top() << " "; // 末尾要素を参照する
        st.pop(); // 末尾要素を削除
      }
    }
    

    出力

    3 2 1 
    

    参照