スタックとは?
- スタックとはデータ構造の1種であり、最初に入れたデータが最後に取り出されるという特徴がある(First In Last Outの略でFILO方式と言うそうです)。
- スタックについて詳しく知りたい方はWikiなどを参考にしてください⇒スタック - Wikipedia
- また、こちらの日本語リファレンスを参考にしました⇒stack - cpprefjp C++日本語リファレンス
宣言
- #include <stack>して、
std::stack<int> stack;
というように宣言することで、データを格納するための箱が作られる。
データの追加(push)
スタックの変数名.push(格納する値);
サンプルコード
スタックは重ねていくようにデータを追加するので、最後に追加した3が一番上にくる。//int型のスタックの設定 std::stack<int> stack; //値の格納 stack.push(1); stack.push(2); stack.push(3);
値の取り出し(top)
最後に入れた値を取得できます。
スタックの変数名.top();
サンプルコード
スタックは入れたのが後のデータから順に取り出されるため、xには3が格納される。//int型のスタックの設定 std::stack<int> stack; //値の格納 stack.push(1); stack.push(2); stack.push(3); // 値の取り出し(x = 3) int x = stack.top();
値の除去(pop)
最後に入れた値を除去できます。
スタックの変数名.pop();
サンプルコード
- pop実行後は、1, 2が入っている。
//値の格納 stack.push(1); stack.push(2); stack.push(3); // 値の除去 stack.pop();
格納している全要素の表示
サンプルコード
- topを使って末尾の値を取得し、popで末尾の値を削除するといったことをwhile文で繰り返します。
- while文実行後にstackは空になっている点に注意。
//int型のスタックの設定 std::stack<int> stack; //値の格納 stack.push(1); stack.push(2); stack.push(3); // サイズ表示 std::cout << "stack.size() = " << stack.size() << std::endl; // 表示 while (!stack.empty()) { std::cout << stack.top() << " "; // 末尾要素を参照する stack.pop(); // 末尾要素を削除 }
実行結果
3, 2, 1,
スタックの大きさの取得
スタックの変数名.size()
サンプルコード
//int型のスタックの設定 std::stack<int> stack; //値の格納 stack.push(1); stack.push(2); stack.push(3); // サイズ表示 std::cout << "stack.size() = " << stack.size() << std::endl;
実行結果
stack.size() = 3