C++ 標準ライブラリ<stack>

C++ では、標準ライブラリがさまざまなコンテナとアルゴリズムを提供し、開発者がより効率的にプログラムを書くのを支援します。

<stack>C++ 標準テンプレートライブラリ(STL)の一部であり、後入れ先出し(LIFO、Last In First Out)のデータ構造を実装しています。このデータ構造は、「最後に追加された要素が最初に削除される」必要があるシナリオに非常に適しています。

<stack>コンテナアダプタはスタックのインターフェースを提供し、他のコンテナ(例:deque 或 vector)に基づいて実装されます。スタックの要素は線形に配置されますが、一端(スタックの先頭)でのみ追加・削除操作が許可されます。

基本操作

  • push(): スタックの先頭に要素を追加します。
  • pop(): スタックの先頭の要素を削除します。
  • top(): スタックの先頭の要素への参照を返しますが、削除はしません。
  • empty(): スタックが空かどうかを確認します。
  • size(): スタック内の要素の数を返します。

構文

以下は、<stack>を使用する基本構文です:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // 向栈中添加元素
    s.push(1);
    s.push(2);
    s.push(3);

    // 访问栈顶元素
    std::cout << "Top element is: " << s.top() << std::endl;

    // 移除栈顶元素
    s.pop();
    std::cout << "After popping, top element is: " << s.top() << std::endl;

    // 检查栈是否为空
    if (!s.empty()) {
        std::cout << "Stack is not empty." << std::endl;
    }

    // 打印栈的大小
    std::cout << "Size of stack: " << s.size() << std::endl;

    return 0;
}

例

以下は、<stack>を使用した完全な例です。出力結果も含みます:

例

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // スタックに要素を追加
    s.push(10);
    s.push(20);
    s.push(30);

    // スタックの先頭の要素を出力
    std::cout << "Top element is: " << s.top() << std::endl; // 出力: Top element is: 30

    // スタックの先頭の要素を削除
    s.pop();
    std::cout << "After popping, top element is: " << s.top() << std::endl; // 出力: After popping, top element is: 20

    // スタックが空かどうかを確認
    if (!s.empty()) {
        std::cout << "Stack is not empty." << std::endl; // 出力: Stack is not empty.
    }

    // スタックのサイズを出力
    std::cout << "Size of stack: " << s.size() << std::endl; // 出力: Size of stack: 2

    // 要素をさらに削除
    s.pop();
    s.pop();

    // スタックが空かどうかを確認
    if (s.empty()) {
        std::cout << "Stack is empty." << std::endl; // 出力: Stack is empty.
    }

    return 0;
}

出力結果:

Top element is: 30
After popping, top element is: 20
Stack is not empty.
Size of stack: 2
Stack is empty.

注意事項

  • <stack>スタック内の要素に直接アクセスする方法は提供されておらず、top() を使用してのみtop()スタックの先頭の要素にアクセスできます。
  • 空のスタックで pop() を呼び出そうとするとtop() 或 pop()未定義の動作になります。
  • <stack>の基になるコンテナは、ランダムアクセスイテレータをサポートする任意のシーケンスコンテナを使用できます。例:vector 或 deque。
その他の拡張