【C++】STLコンテナ - スタックスタックコンテナ① (スタックスタックコンテナの特徴 | スタックスタックコンテナとdeque両端配列コンテナの比較 | 簡単な例)






1. スタックスタックコンテナの紹介



1. スタックコンテナの紹介


C++ 言語の STL 標準テンプレート ライブラリのスタック コンテナーは、後入れ先出し (LIFO、後入れ先出し) コンテナーであり、スタックの最上部で挿入および削除操作を提供します。

スタック コンテナーを使用する前に、<stack> ヘッダー ファイルをインポートする必要があります。

#include "stack"

stack スタック コンテナーは deque 両端配列に基づいており、一部の関数を保護します。deque 関数は stack 関数よりも強力です。


2. スタックスタックコンテナの特徴


スタック スタック コンテナーの機能:

  • 後入れ先出し: LIFO、後入れ先出しでは、最後に挿入された要素が最初に削除された要素になります。
  • 高い実行効率:時間計算量は O(1)。
  • メンバー関数が少ない:ベクトル動的配列や両端デキュー配列と比較して、stack は少数のメンバー関数しか提供しません。
  • 例外の安全性:スタック スタック コンテナーは、例外が発生したときにデータの整合性を確保できます。

3.スタックスタックコンテナとdeque両端配列コンテナの比較


stack スタック コンテナーと deque 両端配列コンテナーの比較:

  • コンテナの特徴:
    • stack スタック コンテナは後入れ先出しの LIFO データ構造で、一方の端でのみ挿入および削除操作が可能です。
      • Push() メソッド。スタックの最上位に要素を追加するために使用されます。
      • Pop() メソッドはスタックの最上位から要素を削除するために使用されます。
      • スタックの最上位は、両端キューまたはベクター コンテナーの末尾に相当します。
    • deque double-ended 配列コンテナ (double-ended queue とも呼ばれます) は、キューの先頭と末尾での挿入および削除操作をサポートする、より柔軟なデータ構造です。
  • イテレータの反復:
    • スタック コンテナーはイテレータを提供せず、先頭の要素の挿入/削除もサポートしません。
    • Deque はイテレータを提供し、キューの先頭と末尾からの要素の追加または削除をサポートします。これは比較的使いやすいものです。
  • 主な目的:スタック スタック コンテナーの主な目的は、プログラムの呼び出し履歴の保存など、要素を後入れ先出しの順序で保存することです。
  • サブクラスの実装: deque 次のような両端配列コンテナーの実装が多数あります。




2. コード例 - スタックスタックコンテナの簡単な例



1. コード例


以下のコード内:

まずスタックコンテナオブジェクトを作成し、コンテナ内にint型オブジェクトを格納します。

    // 创建 stack 堆栈容器对象
    std::stack<int> s;

次に、プッシュ操作とも呼ばれるスタック コンテナーに要素を追加し、スタックの先頭に要素を追加します。

    // 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

次に、 std::stack#top() 関数を呼び出してスタックの最上位要素を出力します。

// 打印栈顶元素
std::cout << "栈顶元素 : " << s.top() << std::endl;

最後に、std::stack#pop() 関数を呼び出して、スタックの最上位要素をポップします。

// 出栈
s.pop();

スタック コンテナー内のすべての要素がスタックからポップされたかどうかを確認したい場合は、 std::stack#empty() 関数を呼び出して確認できます。

    while (!s.empty()) {
    
    
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }

コード例:

#include "iostream"
using namespace std;
#include "stack"

int main() {
    
    

    // 创建 stack 堆栈容器对象
    std::stack<int> s;

    // 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

    // 出栈操作  
    while (!s.empty()) {
    
    
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

2. 実行結果


の結果:

栈顶元素 : 3
栈顶元素 : 2
栈顶元素 : 1
请按任意键继续. . .

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/han1202012/article/details/135162932