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;
}
#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。