Stack 的介绍
Stack实现了一个后进先出的数据结构,与其他容器相比较,栈的元素是线性排列的,但只允许在一端(栈顶)进行添加和移除操作。同时只允许在一端(栈顶)进行添加和移除操作也是栈的他、重要特点。
Stack 的用法
Stack 头文件
Stack 位于C++的基础库<stack>
中,在调用stack的相关函数前需要引用头文件<stack>
。/
#include <stack>
Stack 的基本操作
push()
: 在栈顶添加一个元素。top()
: 返回栈顶元素的引用,但不移除它。pop()
: 移除栈顶元素。empty()
: 检查栈是否为空。size()
: 返回栈中元素的数量。
Stack 的基础语法
0.创建Stack容器
//<void> stack<数据类型> 容器名
stack<int> a;
1.向Stack容器中添加元素
//<void> 容器名.push(欲添加数据)
a.push(1);
2.获取Stack容器中的顶端数据
//<定义的数据类型> 容器名.top()
a.top();
注意: stack 类型的容器只能访问最顶端的数据,即最后放入的数据,同时该操作并不会删除数据.
3.从Stack容器中删除数据
//<void> 容器名.pop()
a.pop();
注意: stack 类型的容器只支持删除栈最顶端的数据,即最后放入的数据.
4.检查栈是否为空
//<bool> 容器名.empty()
a.empty();
返回值: 若容器为空,则返回True
;若容器不为空,则返回False
.
5.获取栈中的元素个数
//<int> 容器名.size()
a.size();
代码示例
#include <iostream>
#include <stack>
int main() {
std::stack<int> s;
// 向栈中添加元素
s.push(10);
s.push(20);
s.push(30);
// 打印栈顶元素
std::cout << "栈顶元素是: " << s.top() << std::endl; // 输出: 栈顶元素是: 30
// 移除栈顶元素
s.pop();
std::cout << "删除元素后的栈顶元素是: " << s.top() << std::endl; // 输出: 删除元素后的栈顶元素是: 20
// 检查栈是否为空
if (!s.empty()) {
std::cout << "栈不为空." << std::endl; // 输出: 栈不为空.
}
// 打印栈的大小
std::cout << "栈中元素个数为: " << s.size() << std::endl; // 输出: 栈中元素个数为: 2
// 继续移除元素
s.pop();
s.pop();
// 检查栈是否为空
if (s.empty()) {
std::cout << "栈是空的." << std::endl; // 输出: 栈是空的.
}
return 0;
}
注意事项
<stack>
不提供直接访问栈中元素的方法,只能通过top()
访问栈顶元素。- 尝试在空栈上调用
top()
或pop()
将导致未定义行为。 <stack>
的底层容器可以是任何支持随机访问迭代器的序列容器,如vector
或deque