【C++ STL】stack::push()とstack::pop()の使い方をわかりやすく解説
本記事では、C++ STLにおける stack::push() および stack::pop() 関数の動作、構文、そして具体的な使用例について詳しく解説します。
C++ STLにおけるスタックとは?
スタックは LIFO(Last In First Out:後入れ先出し) 方式でデータを格納するデータ構造です。要素の挿入と削除は、常に最後に挿入された側の「トップ(top)」から行われます。
皿の積み重ねをイメージすると分かりやすいでしょう。新しい皿を積むときは一番上に置き、皿を取り出すときも一番上から取り除きます。このように、スタックでは最後に追加した要素が最初に取り出されるのが特徴です。
stack::push() とは?
stack::push() はC++ STLに組み込まれた関数で、<stack> ヘッダーファイル内で定義されています。push() を使うことで、スタックコンテナのトップに新しい要素を挿入できます。挿入される要素の内容はコピーされ、初期化されます。
構文
stack_name.push(value_type& val);
パラメータ
この関数は以下のパラメータを受け取ります。
val − スタックに挿入したい値
戻り値
この関数は何も返しません(void型)。
入力例
std::stack<int> stack1; stack1.push(1); stack1.push(2); stack1.push(3);
出力結果(スタックの中身)
3 2 1
このように、後から挿入した要素ほどトップに配置されるため、出力時には逆順(3 → 2 → 1)になります。
使用例
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
int Product = 1;
stck.push(1);
stck.push(2);
stck.push(3);
stck.push(4);
stck.push(5);
stck.push(6);
while (!stck.empty()){
Product = Product * stck.top();
cout<<"\nsize of stack is: "<<stck.size();
stck.pop();
}
return 0;
}出力結果
上記のコードを実行すると、次のような出力が得られます。
size of stack is: 6 size of stack is: 5 size of stack is: 4 size of stack is: 3 size of stack is: 2 size of stack is: 1
このプログラムでは、push() で1〜6の6つの要素を順にスタックへ追加し、その後 while ループ内で pop() を使って要素を一つずつ取り除きながら、各時点でのスタックのサイズを表示しています。
stack::pop() とは?
stack::pop() もC++ STLに組み込まれた関数で、<stack> ヘッダーファイル内で定義されています。pop() は、スタックコンテナのトップから要素を取り除くために使用されます。呼び出すたびにトップの要素が削除され、コンテナのサイズは1つ減少します。
なお、C++ の pop() は削除された要素の値を返さない点に注意してください。削除前に要素の値が必要な場合は、あらかじめ top() 関数で参照しておく必要があります。
構文
stack_name.pop();
パラメータ
この関数はパラメータを受け取りません。
戻り値
この関数は何も返しません(void型)。
入力例
std::stack<int> stack1; stack1.push(1); stack1.push(2); stack1.push(3); stack1.pop();
出力結果(スタックの中身)
2 1
3つの要素(1, 2, 3)を push した後に pop() を1回呼び出すと、トップにあった「3」が取り除かれ、残りは「2, 1」となります。
使用例
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> stck;
int Product = 1;
stck.push(1);
stck.push(2);
stck.push(3);
stck.push(4);
stck.push(5);
stck.push(6);
while (!stck.empty()){
Product = Product * stck.top();
cout<<"\nsize of stack is: "<<stck.size();
stck.pop();
}
return 0;
}出力結果
上記のコードを実行すると、次のような出力が得られます。
size of stack is: 6 size of stack is: 5 size of stack is: 4 size of stack is: 3 size of stack is: 2 size of stack is: 1
まとめ
stack::push() はスタックのトップに要素を追加し、stack::pop() はトップから要素を取り除きます。どちらも <stack> ヘッダーで定義されており、戻り値はありません。LIFO構造の特性を理解して使い分けることで、深さ優先探索(DFS)やUndo機能など、さまざまな場面でスタックを効果的に活用できます。
-
C++で最大頻度スタック(FreqStack)を実装する方法
この記事では、整数を管理する特殊なスタック「FreqStack」をC++で実装する方法を解説します。FreqStackは、以下の2つの操作をサポートするデータ構造です。 push(x):整数xをスタックにプッシュします。 pop():スタック内で最も出現頻度の高い要素を取り除き、その値を返します。同じ頻度の要素が複数存在する場合は、スタックのトップに最も近い(最後に追加された)要素が取り除かれます。 例えば、7、9、7、9、6、7の順に要素をプッシュした後、pop()を4回呼び出すと、出力は7、9、7、6となります。 アルゴリズムの考え方 この問題は、ハッシュマップとスタックを組み合わせる
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス