C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。

C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

スタックで使える主な操作

1. top() – 最上位要素の取得

スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。

  • 構文name_of_stack.top()
  • 引数:なし
  • 戻り値:スタックコンテナの最上位要素への参照

2. push() – 要素の挿入

指定した要素をスタックの最上位に追加します。

  • 構文name_of_stack.push(element)
  • 引数:挿入したい要素
  • 戻り値:なし(void型)

3. pop() – 要素の削除

スタックの最上位にある要素を取り除きます。なお、標準の pop() は削除した要素を返さない点に注意してください。値を取得したい場合は、先に top() を呼び出します。

  • 構文name_of_stack.pop()
  • 引数:なし
  • 戻り値:なし(void型)。最上位要素を削除するのみ

4. size() – 要素数の取得

スタック内に現在存在する要素の総数を返します。

  • 構文name_of_stack.size()
  • 引数:なし
  • 戻り値:スタック内の要素数(符号なし整数型)

5. empty() – 空かどうかの判定

スタックが空であるかどうかを確認します。

  • 構文name_of_stack.empty()
  • 引数:なし
  • 戻り値:真偽値(bool型)。スタックが空なら true、空でなければ false

使用例

以下のコードでは、int型のスタックを作成し、push() で4つの要素を挿入した後、empty()・size()・top()・pop() を組み合わせて操作しています。

#include <bits/stdc++.h>
using namespace std;
int main(){
    // スタックコンテナを作成
    stack <int> newStack;
    // スタックへ要素を挿入
    newStack.push(10);
    newStack.push(20);
    newStack.push(30);
    newStack.push(40);
    // empty()を使って要素が挿入されているか確認
    if(!newStack.empty()){
        // スタックのサイズを計算
        cout<<"Stack size is: "<< newStack.size();
    }
    else{
        cout<<"Stack is empty";
    }
    cout<<"\nElements in the stack are:";
    // top()で最上位要素を表示しながらpop()で削除
    while(!newStack.empty()){
        cout<<" "<< newStack.top();
        newStack.pop();
    }
    return 0;
}

実行結果

Stack size is: 4
Elements in the stack are: 40 30 20 10

このように、最後に挿入した 40 が最初に表示されていることが分かります。これこそがLIFO(後入れ先出し)構造の動作です。スタックは、関数呼び出しの管理やundo機能、深さ優先探索(DFS)など、さまざまな場面で活用される重要なデータ構造なので、ぜひ基本的な操作方法をマスターしておきましょう。

  1. C++ STLのコンテナとは?種類と基本的な使い方をわかりやすく解説

    本記事では、C++のSTL(Standard Template Library)における「コンテナ」について、その概要と分類、そして基本的な使い方をサンプルコード付きで解説します。 コンテナとは コンテナとは、同じ型または異なる型の複数の要素を格納するために使用されるオブジェクトのことです。STLにはさまざまなコンテナが用意されており、データの格納方法やアクセス方法の特徴に応じて、以下のように分類されます。 シーケンスコンテナ(連続コンテナ):array、vector、list など。要素を順番に並べて管理します。 連想コンテナ:set、map、multimap など。キーと値のペアやソート

  2. C++のSTLでスタックを実装するサンプルプログラム【初心者向け解説】

    スタック(Stack)は、操作を行う順序があらかじめ決まっている線形データ構造です。この順序は「LIFO(Last In First Out:後入れ先出し)」または「FILO(First In Last Out:先入れ後出し)」と呼ばれ、最後に追加した要素が最初に取り出されるという特徴を持ちます。本記事では、C++の標準テンプレートライブラリ(STL)に含まれる stack を使って、スタックの基本操作を実装するサンプルプログラムを紹介します。 アルゴリズム このプログラムでは、STLのstackオブジェクトを宣言し、ユーザーが選択した番号に応じてswitch文で各操作を呼び出します。使用す