工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

例を使用した C++ STL のスタック

std::stack とは?

スタックは、LIFO (Last In First Out) 手法に基づいて動作するデータ構造です。 std::stack を使用すると、一方の端からのみ要素を追加および削除できます。

std::stack クラスはコンテナー アダプターです。コンテナ オブジェクトは、同様のデータ型のデータを保持します。さまざまなシーケンス コンテナーからスタックを作成できます。コンテナーが指定されていない場合は、デフォルトで deque コンテナーが使用されます。コンテナ アダプタはイテレータをサポートしていないため、データの操作には使用できません。

この C++ チュートリアルでは、次のことを学びます

スタック構文

スタックを作成するには、コードに ヘッダー ファイルを含める必要があります。次に、この構文を使用して std::stack:

を定義します。
template <class Type, class Container = deque<Type> > class stack;

メンバーの種類

スタック メンバー タイプは次のとおりです。

スタック内の操作

C++ スタックは、次の基本的な操作をサポートしています:

スタックの実装

ステップ 1) 最初は空のスタックがあります。空のスタックのトップは -1 に設定されます。

ステップ 2) 次に、要素 5 をスタックにプッシュしました。スタックの一番上は要素 5 を指します。

ステップ 3) 次に、要素 50 をスタックにプッシュしました。スタックの一番上が移動し、要素 50 を指します。

ステップ 4) 次に、ポップ操作を実行して、スタックから一番上の要素を削除しました。要素50がスタックからポップされる。スタックの一番上が要素 5 を指すようになりました。

push() と pop()

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();
	}
}

出力:

コードのスクリーンショットは次のとおりです:

コードの説明:

<オール>
  • コードに iostream ヘッダー ファイルをインクルードして、その関数を使用します。
  • スタック ヘッダー ファイルをコードにインクルードして、その関数を使用します。
  • コードに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • main() 関数を呼び出します。この関数内にプログラム ロジックを追加する必要があります。
  • 整数値を格納するスタック st を作成します。
  • push() 関数を使用して、値 10 をスタックに挿入します。
  • push() 関数を使用して、値 20 をスタックに挿入します。
  • push() 関数を使用して、値 30 をスタックに挿入します。
  • push() 関数を使用して、値 40 をスタックに挿入します。
  • pop() 関数を使用して、スタックから一番上の要素、つまり 40 を削除します。一番上の要素は 30 になります。
  • pop() 関数を使用して、スタックから一番上の要素、つまり 30 を削除します。一番上の要素は 20 になります。
  • while ループと empty() 関数を使用して、スタックが空でないかどうかを確認します。 ! NOT 演算子です。
  • スタックの現在の内容をコンソールに出力します。
  • スタックで pop() 関数を呼び出します。
  • while ループの本体の終わり。
  • main() 関数本体の終わり。
  • 空()、サイズ()、トップ()

    スタックには、スタックとその値を操作するために使用できる組み込み関数があります。これらには以下が含まれます:

    例 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;
    }
    

    出力:

    コードのスクリーンショットは次のとおりです:

    コードの説明:

    <オール>
  • 関数を使用するために、コードに iostream ヘッダー ファイルを含めます。
  • 関数を使用するために、スタック ヘッダー ファイルをコードにインクルードします。
  • 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()

    これらは他の組み込みスタック関数です:

    例 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();
    	}
    }
    

    出力:

    コードのスクリーンショットは次のとおりです:

    コードの説明:

    <オール>
  • コードに iostream ヘッダー ファイルをインクルードして、その関数を使用します。
  • スタック ヘッダー ファイルをコードにインクルードして、その関数を使用します。
  • cstdlib ヘッダー ファイルをコードにインクルードして、その関数を使用します。
  • コードに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • main() 関数を呼び出します。プログラム ロジックは、この関数の本体内に追加されます。
  • 整数値を格納する st1 という名前のスタックを宣言します。
  • st2 という名前のスタックを宣言して、整数値を格納します。
  • emplace() 関数を使用して、st1 という名前のスタックに整数 12 を挿入します。
  • emplace() 関数を使用して、st1 という名前のスタックに整数 19 を挿入します。
  • emplace() 関数を使用して、st2 という名前のスタックに整数 20 を挿入します。
  • emplace() 関数を使用して、整数 23 を st2 という名前のスタックに挿入します。
  • swap() 関数を使用して、st1 と st2 の 2 つのスタックの内容を交換します。スタック st1 の内容をスタック st2 に移動する必要があります。スタック st2 の内容をスタック st1 に移動する必要があります。
  • コンソールにテキストを出力します。
  • 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 を宣言します。

    例 3:

    #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();  
    }
    

    出力:

    コードのスクリーンショットは次のとおりです:

    コードの説明:

    <オール>
  • コードに iostream ヘッダー ファイルをインクルードして、その関数を使用します。
  • スタック ヘッダー ファイルをコードにインクルードして、その関数を使用します。
  • cstdlib ヘッダー ファイルをコードにインクルードして、その関数を使用します。
  • コードに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • main() 関数を呼び出します。プログラム ロジックは、この関数の本体内に追加する必要があります。
  • 整数データを格納するスタック st を宣言します。
  • 要素 12 をスタックに追加します。
  • 要素 19 をスタックに追加します。
  • 要素 20 をスタックに追加します。
  • コンソールのスタックの一番上にある要素を出力します。
  • スタックのサイズをコンソールに出力します。
  • 関数 main() の本体の終わり。
  • まとめ:


    C言語

    1. C++ の演算子と例:型とプログラムとは
    2. C++ do…while ループと例
    3. C++ Switch Case ステートメントと EXAMPLE
    4. 例による配列の C++ 動的割り当て
    5. C++ ポインタと例
    6. C++ 演算子のオーバーロードと例
    7. C++ 構造体と例
    8. 印刷例を使用した C++ 標準テンプレート ライブラリ (STL) のマップ
    9. C++ の std::list と例
    10. C++ 関数とプログラム例
    11. 構造体とクラスの違い:C++ の例で説明