std::stack を試してみます。
ヘッダ <stack> で定義 | |
template< class T, class Container = std::deque<T> > class stack; |
|
T | - | 要素の型 |
Container | - | 要素を格納するために使用するベースとなるコンテナの型。このコンテナは SequenceContainer
の要件を満たさなければなりません。さらに、通常のセマンティクスを持つ以下の関数を提供していなければなりません。
|
std::stack はスタックの機能、特に LIFO(後入れ先出し) のデータ構造を提供するコンテナアダプタです。
このクラステンプレートはベースとなるコンテナのラッパーとして振る舞います。stackのベースとなるコンテナの末尾へ要素をプッシュし、末尾からポップします。すなわち末尾がスタックトップとなります。
ja.cppreference.com に記載されているものをベースに改造したサンプルプログラムから提示します。
stack.top() は、コンテナが空だと segmentation fault を発生して異常終了しました。事前に stack.size() を確認してコンテナが空でないことを確認する必要がありそうです。
コンパイラ : | g++, | 9.3.0 |
OS : | Ubuntu (WSL2), | 20.04 |
[プログラムソース "stack_01.cpp"]
#include <stack> // stack
#include <iostream>
int main()
{
std::stack<int> s;
s.push(2);
s.push(6);
s.push(51);
std::cout << s.size() << " elements on stack.\n";
std::cout << "Top element: "
<< s.top() // Leaves elements on stack.
<< "\n";
std::cout << s.size() << " elements on stack.\n";
while(s.size() > 0){
std::cout << s.size() << " elements on stack.\n";
std::cout << "Top element: " << s.top() << "\n";
s.pop();
}
std::cout << s.size() << " elements on stack.\n";
return EXIT_SUCCESS;
}
[出力]
3 elements on stack. Top element: 51 3 elements on stack. 3 elements on stack. Top element: 51 2 elements on stack. Top element: 6 1 elements on stack. Top element: 2 0 elements on stack.
2021-01-04 | - | 新規作成 |