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

C++ std::stack完全ガイド:実践例付きでLIFOコンテナをマスター

std::stackとは

std::stackはLIFO(Last In, First Out / 後入れ先出し)原理を実装するコンテナアダプタです。要素の挿入と削除を片端(トップ)のみで許可します。デフォルトではstd::dequeを内部コンテナとして使用しますが、任意のシーケンスコンテナ(std::vectorやstd::listなど)を指定できます。

コンテナアダプタはイテレータを公開しないため、スタックを直接走査することはできません。代わりにメンバ関数を通じて操作します。

学習目標

構文

<stack>ヘッダをインクルードし、以下のテンプレートでスタックを宣言:

template<class T, class Container = std::deque<T>> class stack;

メンバ型

主要操作

実装の概要

以下はスタック操作の視覚的表現です(トップはポインタで示す)。

スタック操作の概念図

push()とpop()

push()メソッドは新しい要素を追加し、サイズを1増やします:

stack.push(value);

逆にpop()はトップ要素を削除し、サイズを減らします:

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(); // 40を削除
    st.pop(); // 30を削除
    while (!st.empty()) {
        cout << ' ' << st.top();
        st.pop();
    }
    return 0;
}

出力:20 10

empty()、size()、top()

これらのユーティリティ関数はスタックの状態を素早く把握できます。

例2:スタック状態の検査

#include <iostream>
#include <stack>
using namespace std;
void display(stack<int> s) {
    while (!s.empty()) {
        cout << '\t' << s.top();
        s.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: ";
    display(st);
    cout << "\n st.size() : " << st.size();
    cout << "\n st.top() : " << st.top();
    st.pop();
    cout << "\n st after pop: ";
    display(st);
    return 0;
}

出力:スタック内容、サイズ、トップ要素、pop後の状態を表示。

emplace()とswap()

• emplace()は要素をその場で構築し、余分なコピーを回避。
• swap()は2つのスタックの内容を効率的に交換。

例3:emplace()とswap()の使用

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st1, 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();
    }
}

出力:スワップ前後のスタック内容を示す。

STLでのstd::stack使用

1行でスタックを実装:

std::stack<T> st;

例:

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(12);
    st.push(19);
    st.push(20);
    cout << st.top(); // 20
    cout << st.size(); // 3
    return 0;
}

まとめ

C言語

  1. C++演算子を徹底解説:種類、例、サンプルプログラム付き
  2. C++ do-while文:構文、実践例、ネストしたループ
  3. C++ switch文をマスター:構文、使い方、実践例
  4. C++動的配列の確保をマスター:コード例付き実践ガイド
  5. C++ポインタをマスター:概念、例、実践的応用
  6. C++演算子オーバーロード:コード例付き実践ガイド
  7. C++構造体を実例で徹底解説
  8. C++ std::map完全ガイド:連想配列の実践的活用とコード例
  9. C++のstd::listをマスターする:構文、関数、実践例
  10. C++関数を実例で徹底解説:基本から応用まで
  11. C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス