首页 > 编程语言 >C++之stack容器

C++之stack容器

时间:2024-11-07 18:17:20浏览次数:5  
标签:std 容器 deque 栈顶 C++ push stack

stack 是 C++ STL (Standard Template Library) 中的一种容器适配器,用于实现后进先出(LIFO, Last In First Out)的数据结构。stack 提供了一组基本的操作来管理栈顶元素的插入和移除。stack 的底层可以基于不同的容器(如 vectordequelist)实现,默认情况下使用 deque

主要特点

  1. 后进先出:最后插入的元素最先被移除。
  2. 基本操作:提供 pushpoptopempty 和 size 等基本操作。
  3. 容器适配器stack 是一个容器适配器,可以基于不同的底层容器实现。

常用操作

定义和初始化
#include <stack>

std::stack<int> s; // 创建一个空的 stack 容器
std::stack<int, std::vector<int>> s_vec; // 使用 vector 作为底层容器的 stack
std::stack<int, std::deque<int>> s_deque; // 使用 deque 作为底层容器的 stack(默认)
std::stack<int, std::list<int>> s_list; // 使用 list 作为底层容器的 stack
插入元素
s.push(1); // 将 1 插入栈顶
s.push(2); // 将 2 插入栈顶
移除元素
s.pop(); // 移除栈顶元素
访问栈顶元素
if (!s.empty()) {
    std::cout << "Top element: " << s.top() << std::endl;
} else {
    std::cout << "Stack is empty." << std::endl;
}
检查栈是否为空
if (s.empty()) {
    std::cout << "Stack is empty." << std::endl;
} else {
    std::cout << "Stack is not empty." << std::endl;
}
获取栈的大小
std::cout << "Stack size: " << s.size() << std::endl;
示例代码

以下是一个完整的示例,展示了如何使用 stack

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // 插入元素
    s.push(1);
    s.push(2);
    s.push(3);

    // 输出栈顶元素
    std::cout << "Top element: " << s.top() << std::endl;

    // 移除栈顶元素
    s.pop();

    // 再次输出栈顶元素
    std::cout << "Top element after pop: " << s.top() << std::endl;

    // 检查栈是否为空
    if (s.empty()) {
        std::cout << "Stack is empty." << std::endl;
    } else {
        std::cout << "Stack is not empty." << std::endl;
    }

    // 获取栈的大小
    std::cout << "Stack size: " << s.size() << std::endl;

    return 0;
}

总结

stack 是一个非常有用的数据结构,适用于需要后进先出操作的场景。常见的应用场景包括表达式求值、回溯算法、函数调用栈等。由于 stack 是一个容器适配器,你可以选择不同的底层容器来实现它,以适应不同的性能需求。默认情况下,stack 使用 deque 作为底层容器,因为它在大多数情况下提供了良好的性能。

标签:std,容器,deque,栈顶,C++,push,stack
From: https://blog.csdn.net/weixin_42300449/article/details/143604799

相关文章

  • C++之queue容器
    queue是C++STL(StandardTemplateLibrary)中的一种容器适配器,用于实现先进先出(FIFO,FirstInFirstOut)的数据结构。queue提供了一组基本的操作来管理队列前端和后端的元素。queue的底层可以基于不同的容器(如deque或list)实现,默认情况下使用deque。主要特点先进......
  • c++11 --- 左值与右值的使用;
    C++98的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,C++11之后我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名(语法层面上)。左值和右值左值是一个表示数据的表达式(如变量名或解引用的指针),一般是有持久状态,存储在内存中,我们......
  • 【C++】封装红黑树实现mymap和myset
     无论你觉得自己多么的了不起,也永远有人比你更强。......
  • C++继承
    文章目录一、继承的概念和定义1、继承的概念2、继承的定义3、继承基类成员访问方式的变化二、基类和派生类之间的转换三、继承中的作用域1、隐藏规则四、派生类的默认成员函数1、常见默认成员函数2、实现一个不能被继承的类五、继承与友元六、继承与静态成员变量七......
  • Java并发编程 --- 并发容器
    ConcurrentHashMap基本介绍在JDK1.8中,它的数据结构:Node数组+链表/红黑树初始化/***Initializestable,usingthesizerecordedinsizeCtl.*/privatefinalNode<K,V>[]initTable(){Node<K,V>[]tab;intsc;while((tab=table)==null||tab.length......
  • C++ 的前世今生:从“小兄弟”到编程大佬
    当你听到C++这个名字,可能会有点好奇:为什么名字里有个“++”?其实,这个“++”是C++编程中的一个符号,意思是“加一”,也可以理解为“进化版”。C++的名字暗示了它比C语言更加强大、功能更多。那么,这个编程语言是怎么来的?又有什么特别之处呢?让我们用大白话来聊聊C++的历......
  • 使用C++和QT开发应用程序入门以及开发实例分享
    目录1、搭建开发环境(VS2010和QT4.8.2)2、创建一个QT窗口3、在QT窗口中添加子窗口4、QT界面布局5、QT信号(SIGNAL)和槽(SLOT)6、最后C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实......
  • C++ 的“百变魔法”:搞懂基本数据类型和变量
    编程世界里,数据就像材料,而基本数据类型就决定了这些材料能做什么。每种数据类型都有它自己的“特长”,我们可以用它们来处理不同的信息。今天,我们就来看看C++里最常见的几种基本数据类型:int,char,float,double,bool,以及如何用变量来存储这些数据。什么是数据类型?简单......
  • CUDA开始的GPU编程 - 第四章:C++封装GPU上的数组
    第四章:C++封装GPU上的数组std::vector的秘密:第二模板参数**你知道吗?**std::vector作为模板类,其实有两个模板参数:std::vector<T,AllocatorT>那为什么我们平时只用了std::vector呢?因为第二个参数默认是std::allocator。也就是std::vector等价于std::vector<T,s......
  • 应届生必看!23 个高质量 C++ 项目推荐,校招简历秒加分
    大家好,我是小康。最近,不少同学私信我,临近毕业忙着找工作,想问有没有推荐的C++项目,既能练手又能让简历更出彩。我也想起自己当年毕业时同样的焦虑,知道作为C++后端开发的求职者,有几个实际且吸引人的项目,能在面试时为自己增添不少分量。今天就结合我的经验,给大家推荐几个项目,都......