積み重ねる C++ STL の例
⚡ スマートサマリー
積み重ねる C++ STLは、単一の端から要素を追加および削除するLIFOコンテナアダプタを実装しています。ping 順序付きデータを管理するための、deque、vector、listなどの基となるシーケンスコンテナ。
std::スタックとは何ですか?
スタックは、LIFO (Last In First Out) 技術に基づいて動作するデータ構造です。std::stack では、要素を片側からのみ追加および削除できます。
std::stack クラスはコンテナアダプタです。コンテナオブジェクトは、同じデータ型のデータを保持します。さまざまなシーケンスコンテナからスタックを作成できます。コンテナが指定されていない場合は、デフォルトで deque コンテナが使用されます。コンテナアダプタはイテレータをサポートしていないため、データの操作には使用できません。
スタック構文
スタックを作成するには、 コード内のヘッダー ファイル。 次に、この構文を使用して std::stack を定義します。
template <class Type, class Container = deque<Type> > class stack;
- タイプ – std::stackに含まれる要素の型です。有効な値であれば何でも構いません。 C++ 型またはユーザー定義型です。
- コンテナ – は、基礎となるコンテナ オブジェクトのタイプです。
会員種別
スタック メンバーのタイプは次のとおりです。
- 値の種類– 最初のテンプレートパラメータT。これは要素の型を表します。
- コンテナタイプ– 2番目のテンプレートパラメータであるContainer。これは、基となるコンテナの種類を示します。
- サイズタイプ– 符号なし整数型。
Operaスタック内のオプション
A C++ スタックは次の基本操作をサポートします。
- プッシュ – スタックにアイテムを追加/プッシュします。
- ポップ スタックからアイテムを削除/ポップします。
- ピーク スタックの最上位の項目を削除せずに返します。
- 満杯です スタックが満杯かどうかを確認します。
- が空です スタックが空かどうかを確認します。
スタックの実装
以下の手順は、アイテムがプッシュされてからポップされる際に、スタックの最上部がどのように移動するかを示しています。
ステップ 1) 最初は空のスタックがあります。空のスタックの最上位は -1 に設定されます。
ステップ2)次に、要素5をスタックにプッシュしました。スタックの最上位は要素5を指します。
ステップ 3) 次に、要素 50 をスタックにプッシュしました。スタックの最上位が移動し、要素 50 を指すようになります。
ステップ4)次に、スタックから最上位の要素を削除するポップ操作を実行しました。要素50がスタックからポップされました。スタックの最上位は要素5を指すようになりました。
プッシュ()とポップ()
stack::push() 関数は、スタックの先頭に新しい項目を追加します。挿入後、スタックのサイズは 1 増加します。この関数の構文は次のとおりです。
stack.push(value)
値はスタックに挿入する項目です。
stack::pop() 関数はスタックの最上位要素を削除します。これはスタックの最新の要素です。削除後、スタックのサイズは 1 減少します。関数の構文は次のとおりです。
stack.pop()
この関数はパラメータを取りません。
例1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
出力:
コードのスクリーンショットは次のとおりです。
Code 説明:
- その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
- その関数を使用するには、コードにスタック ヘッダー ファイルを含めます。
- std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
- main() 関数を呼び出します。 プログラム ロジックはこの関数内に追加する必要があります。
- 整数値を格納するスタック st を作成します。
- Push() 関数を使用して、値 10 をスタックに挿入します。
- Push() 関数を使用して、値 20 をスタックに挿入します。
- Push() 関数を使用して、値 30 をスタックに挿入します。
- Push() 関数を使用して、値 40 をスタックに挿入します。
- Pop() 関数を使用して、スタックから最上位の要素、つまり 40 を削除します。最上位の要素は 30 になります。
- Pop() 関数を使用して、スタックから最上位の要素、つまり 30 を削除します。最上位の要素は 20 になります。
- while ループと empty() 関数を使用して、スタックが空でないかどうかを確認します。! は NOT 演算子です。
- スタックの現在の内容をコンソールに出力します。
- スタック上で Pop() 関数を呼び出します。
- while ループの本体の終わり。
- main() 関数本体の終わり。
empty()、size()、top()
スタックには、スタックとその値を試すために使用できる組み込み関数があります。 これらには次のものが含まれます。
- 空の()スタックが空かどうかを確認します。
- サイズ()– スタックのサイズ、つまりスタック内の要素数を返します。
- 上()– スタックの最上位要素にアクセスします。
例2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
出力:
コードのスクリーンショットは次のとおりです。
Code 説明:
- iostream ヘッダー ファイルの機能を使用するには、コードに iostream ヘッダー ファイルを含めます。
- その関数を使用するには、コードにスタック ヘッダー ファイルを含めます。
- std 名前空間を呼び出さずにそのクラスを使用するには、プログラムに std 名前空間を含めます。
- スタック mystack の作成に使用できる関数 createStack を作成します。 スタックには整数のセットが保持されます。
- createStack 関数の本体の始まり。
- mystack データ型のインスタンスを作成し、ms という名前を付けます。
- while ループと empty() 関数を使用して、スタックが空かどうかを確認します。
- while ループの本体の開始。
- スタックの最上位に保存されている top() 関数を使用します。 \t 文字は新しいタブを作成します。
- スタックの最上位にある要素を削除するには、pop() 関数を使用します。
- while ループの本体の終わり。
- コンソールに空行を出力します。
- createStack 関数の本体の終わり。
- main() 関数を呼び出します。 プログラム ロジックは main() 関数の本体内に追加する必要があります。
- 関数 main() の本体の開始。
- スタック オブジェクト st を作成します。
- Push() 関数を使用して、要素 32 をスタックに挿入します。
- Push() 関数を使用して、要素 21 をスタックに挿入します。
- Push() 関数を使用して、要素 39 をスタックに挿入します。
- Push() 関数を使用して、要素 89 をスタックに挿入します。
- Push() 関数を使用して、要素 25 をスタックに挿入します。
- コンソールにテキストを出力します。
- 上記の挿入操作をスタックに実行するには、createStack 関数を呼び出します。
- スタックのサイズを他のテキストと一緒にコンソールに表示します。
- コンソールのスタックの一番上にある要素を出力します。
- コンソールにテキストを出力します。
- スタックの先頭にある要素を削除します。 その後、スタックに残っている要素を返します。
- 上記の操作を実行するには、createStack 関数を呼び出します。
- プログラムは正常に完了すると値を返す必要があります。
- 関数 main() の本体の終わり。
emplace() と swap()
その他の組み込みスタック関数は次のとおりです。
- emplace()– スタックを構築し、新しい要素をスタックの最上位に挿入します。
- スワップ()スタックの内容を別のスタックの内容と交換します。
例3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
出力:
コードのスクリーンショットは次のとおりです。
Code 説明:
- その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
- その関数を使用するには、コードにスタック ヘッダー ファイルを含めます。
- その関数を使用するには、コードに cstdlib ヘッダー ファイルを含めます。
- std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
- main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加されます。
- 整数値を格納するために、st1 という名前のスタックを宣言します。
- 整数値を格納するために、st2 という名前のスタックを宣言します。
- emplace() 関数を使用して、st12 という名前のスタックに整数 1 を挿入します。
- emplace() 関数を使用して、st19 という名前のスタックに整数 1 を挿入します。
- emplace() 関数を使用して、st20 という名前のスタックに整数 2 を挿入します。
- emplace() 関数を使用して、st23 という名前のスタックに整数 2 を挿入します。
- swap() 関数を使用して、1 つのスタック st2 と st1 の内容を交換します。 スタック st2 の内容をスタック st2 に移動する必要があります。 スタック st1 の内容をスタック stXNUMX に移動する必要があります。
- コンソールにテキストを出力します。
- while ステートメントと empty() 関数を使用して、スタック st1 が空でないかどうかを確認します。
- スタック st1 の内容をコンソールに出力します。 「 」は、スタック要素をコンソールに出力するときにスタック要素の間にスペースを追加します。
- スタック st1 で Pop() 関数を実行して、最上位の要素を削除します。
- while ステートメントの本文の終わり。
- コンソールにテキストを出力します。endlは C++ 終了行のキーワード。マウス カーソルを次の行に移動し、そこから印刷を開始します。
- while ステートメントと empty() 関数を使用して、スタック st2 が空でないかどうかを確認します。
- スタック st2 の内容をコンソールに出力します。 「 」は、スタック要素をコンソールに出力するときにスタック要素の間にスペースを追加します。
- スタック st2 で Pop() 関数を実行して、最上位の要素を削除します。
- while ステートメントの本文の終わり。
- main() 関数の本体の終わり。
STL でのスタック
STL(標準テンプレートライブラリ)には、共通のテンプレートクラスが付属しています。 C++ データ構造。したがって、スタックも STL で実装できます。このライブラリをコードに含めて、スタックを定義するために使用するだけです。
stack<T> st;
上記の構文は、データ型 T の要素へのスタック st を宣言します。
例4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
出力:
コードのスクリーンショットは次のとおりです。
Code 説明:
- その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
- その関数を使用するには、コードにスタック ヘッダー ファイルを含めます。
- その関数を使用するには、コードに cstdlib ヘッダー ファイルを含めます。
- std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
- main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
- 整数データを格納するスタック st を宣言します。
- 要素 12 をスタックに追加します。
- 要素 19 をスタックに追加します。
- 要素 20 をスタックに追加します。
- コンソールのスタックの一番上にある要素を出力します。
- スタックのサイズをコンソールに出力します。
- 関数 main() の本体の終わり。







