stack

在C++中,<stack> 是标准模板库(STL)的一部分,它实现了一个后进先出(LIFO,Last In First Out)的数据结构。这种数据结构非常适合于需要"最后添加的元素最先被移除"的场景。<stack> 容器适配器提供了一个栈的接口,它基于其他容器(如 dequevector)来实现。栈的元素是线性排列的,但只允许在一端(栈顶)进行添加和移除操作。

基本操作

  • 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> 不提供直接访问栈中元素的方法,只能通过 top() 访问栈顶元素。
  • 尝试在空栈上调用 top()pop() 将导致未定义行为。
  • <stack> 的底层容器可以是任何支持随机访问迭代器的序列容器,如 vectordeque

示例

下面是一个使用 <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;
}

输出结果:

Top element is: 30
After popping, top element is: 20
Stack is not empty.
Size of stack: 2
Stack is empty.

这些操作展示了如何在C++中使用 std::stack 来实现栈的基本功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值