从零开始手写STL库:Stack

news/2024/9/28 17:17:37 标签: c++, 开发语言, 数据结构, stl

从零开始手写STL库–Stack的实现

Gihub链接:miniSTL


文章目录

  • 从零开始手写STL库–Stack的实现
  • 一、stack是什么?
  • 二、stack要包含什么函数
  • 总结


一、stack是什么?

栈是一种后进先出(LIFO,Last In First Out)的数据结构

这意味着最后被压入栈的元素将是第一个被弹出的

这种结构类似于一堆叠放的盘子,只能在顶部添加或移除盘子

底层实现可以使用deque,也可以是list或者vector,取决于使用场景,STL库中默认是deque,也可以修改

这里使用之前实现的myDeque作为底层进行栈的搭建,同样的也是一层封装

二、stack要包含什么函数

必要的三个函数:push, pop 和 top

不过这里留下一个接口,用于修改实现底层

template <typename T, typename Container = myDeque<T> >
class myStack
{
private:
    Container data;  // 修改container,并且对应地函数名称改一改就可以了

public:
    void push(const T & value)
    {
        data.push_back(value);
    }

    void pop()
    {
        if(data.empty()) throw std::runtime_error("Stack is empty!");
        else data.pop_back();
    }

    T& top()
    {
        if(data.empty()) throw std::runtime_error("Stack is empty!");
        else return data[data.getSize()-1];
    }

    size_t size()
    {
        return data.getSize();
    }

    bool empty()
    {
        return data.empty();
    }
};

总结

栈并不会在面试场景中出现太多,更多的是在笔试中,如判断括号是否平衡,如力扣20
在这里插入图片描述
这种情况下就要想到用栈


http://www.niftyadmin.cn/n/5681537.html

相关文章

Acwing 约数

1.试除法 思路分析&#xff1a;利用试除法求一个数的所有约数&#xff0c;思路和判断和求质数的判定类似 一个数N有一个约数d&#xff0c;那么N/d也必然是其约数 约数都是成对出现的&#xff0c;只需要枚举1到 n \sqrt{n} n ​即可&#xff0c;注意不要让一个约数加入两次! …

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…

STM32 map 文件浅析

目录 一、概述二、Section Cross References三、Removing Unused input sections from the image四、Memory Map of the image1、Local Symbols2、全局符号&#xff08;Global Symbols&#xff09; 五、Image Symbol Table六、Image component sizes 一、概述 .map 文件是编译…

Netty--第三章

Netty 进阶 1. 粘包与半包 1.1 粘包现象 服务端代码 public class HelloWorldServer { static final Logger log LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss new NioEventLoopGroup(1); NioEventLoopGroup worker new Nio…

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…

转做大模型开发,能不能挽救职业生涯?

大模型算是当之无愧最火的一个方向了&#xff0c;算是新时代的风口。有小伙伴觉得&#xff0c;既然是新领域、新方向&#xff0c;那么&#xff0c;人才需求肯定比较大&#xff0c;相应的人才缺乏&#xff0c;竞争也会更少&#xff0c;那转行去做大模型是不是一个更好的选择呢&a…

leetcode老问题新发现(更新ing)

重刷Leetcode [704. 二分查找](https://leetcode.cn/problems/binary-search/description/)[27. 移除元素](https://leetcode.cn/problems/remove-element/description/)977.有序数组的平方 前言&#xff1a;之前用C把代码随想录写的差不多了&#xff0c;近期在学Java&#xff…

Vue中对数组变化监听

在实际开发中&#xff0c;经常要对数组进行操作&#xff0c;最为常见的方法就是直接对数组中的某个元素进行赋值&#xff0c;比如下面这样的&#xff1a; <script>export default {data() {return {comments: [],isReply: [0, 0, 0, 0, 0]};},methods: {replyTo: functi…