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

【初心者向け】C++ STLのstack::top()関数の使い方とサンプルコード解説

本記事では、C++ STLで提供されているstack::top()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。

C++ STLにおけるスタック(stack)とは?

スタックは「LIFO(Last In First Out:後入れ先出し)」という方式でデータを管理するデータ構造です。要素の挿入と削除は、常に最後に挿入された側、すなわちスタックの最上部から行われます。

イメージとしては「皿の積み重ね」が分かりやすいでしょう。新しい皿を積むときは一番上に置き、取り出すときも一番上から取ります。このように、最後に追加した要素にのみアクセスできるのがスタックの特徴です。

stack::top()とは何か?

stack::top()は、C++ STLの<stack>ヘッダーファイルで定義されている組み込み関数です。この関数を使うことで、スタックコンテナの最上部にある要素へアクセスできます。

スタックにおいて「トップ」とは、最後に挿入された(=最も新しい)要素を指します。そのため、直近でpushした値を確認したい場合にtop()を使用します。

構文

stack_name.top();

パラメータ

この関数は引数を受け取りません。

戻り値

スタックコンテナの最上部にある要素への参照を返します。参照が返されるため、返却された値を読み取るだけでなく、変更することも可能です。

入力例

std::stack<int> odd;
odd.emplace(1);
odd.emplace(3);
odd.emplace(5);
odd.top();

出力

5

上記の例では、1 → 3 → 5 の順に要素を挿入しているため、最後に追加された5がトップ要素となり、top()は5を返します。

実践的な使用例

次のコードでは、スタックのトップ要素を表示した後、top()pop()を組み合わせて全要素を順番に取り出しています。

#include <iostream>
#include <stack>
using namespace std;

int main(){
    stack<int> stck_1, stck_2;
    // スタック1に要素を挿入
    stck_1.push(1);
    stck_1.push(2);
    stck_1.push(3);
    stck_1.push(4);
    // top()でトップ要素を取得して表示
    cout << "The top element in stack using TOP(): " << stck_1.top();
    cout << "\nElements in stack are: ";
    // top()とpop()で全要素を取り出し
    while (!stck_1.empty()){
        cout << stck_1.top() << " ";
        stck_1.pop();
    }
    return 0;
}

実行結果

上記のコードを実行すると、以下の出力が得られます。

The top element in stack using TOP(): 4
Elements in stack are: 4 3 2 1

まとめ

top()は、スタックの最上部(最後に挿入された)要素を取得するための関数です。注意点として、空のスタックに対してtop()を呼び出すと未定義動作となるため、必ずempty()でスタックが空でないことを確認してから使用するのが安全です。また、LIFO構造のため、要素を先頭からすべて表示したい場合は、今回の例のようにtop()で値を取得しながらpop()で削除していく方法が一般的です。

  1. L={0ⁿ1ᵐ2ᵐ3ⁿ|m, n ≥ 0}を受理するプッシュダウンオートマトン(PDA)の構築方法

    言語「L」が与えられ、この言語を受理するプッシュダウンオートマトン(PDA)を構築することが課題です。この言語は、0の出現回数と3の出現回数が等しく、1の出現回数と2の出現回数も等しい文字列の集合を表します。さらに、mとnは0以上であるため、すべての記号の出現回数が0となる空文字列(NULL)も受理されなければなりません。 プッシュダウンオートマトンとは? プッシュダウンオートマトン(Pushdown Automata:PDA)は、正規文法に対して決定性有限オートマトン(DFA)を設計するのと同じように、文脈自由文法を実装するための手法です。DFAは有限のデータしか扱えませんが、PDAはよ

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

    C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス