文章目录

  • 1 栈的顺序实现
    • 1.1 示意图
    • 1.2 StaticStack设计要点
    • 1.3 继承关系图
    • 1.4 接口实现
  • 2 代码实现

1 栈的顺序实现

1.1 示意图

1.2 StaticStack设计要点

类模板:

  • 使用原生数组作为栈的存储空间。
  • 使用模板参数决定栈的最大容量。

1.3 继承关系图

1.4 接口实现


2 代码实现

StaticStack.h

#ifndef STATICSTACK_H
#define STATICSTACK_H#include "Stack.h"
#include "Exception.h"namespace LemonLib {template <typename T, int N>
class StaticStack : public Stack<T>
{protected:T m_sapce[N];int m_top;int m_size;public:StaticStack(){m_top = -1;m_size = 0;}void push(const T& e){if (m_size < N){m_sapce[m_top + 1] = e; //之所以这里不直接m_space++是为了异常安全,防止赋值的过程中出现异常m_top++;m_size++;}else{THROW_EXCEPTION(InvalidOperationException, "No space in current stack...");}}int capacity() const{return N;}void pop(){if (m_size > 0){m_top--;m_size--;}else{THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");}}T top() const{if (m_size > 0){return m_sapce[m_top];}else{THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");}}void clear(){m_top = -1;m_size = 0;}int size() const{return m_size;}
};
}#endif // STATICSTACK_H

main.cpp:

#include <iostream>
#include "StaticStack.h"using namespace std;
using namespace LemonLib;int main()
{StaticStack<int, 5> stack;try{stack.pop();}catch (const Exception& e){cout << e.message() << endl;cout << e.location() << endl;}for (int i=0; i<5; i++){stack.push(i);}while (stack.size()){cout << stack.top() << endl;stack.pop();}return 0;
}

StaticStack相关推荐

  1. 退出窗口[置顶] 退出Activity的方法

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下退出窗口 1.. 停止全体Activity的方法 ActivityManager activityMgr = (Ac ...

最新文章

  1. Oracle 原理: PL/SQL基础
  2. php中ci的session自动加载报错
  3. [vue] vue开发过程中你有使用什么辅助工具吗?
  4. HDFS Safemode问题
  5. 湖南乡村过年:祭祖、团圆饭、除夕、拜年
  6. SQL Server问题之The remote procedure call failed. [0x800706be]
  7. Spark DF:关于Row中的数值获取问题
  8. 数据库 SQL 学习(入门篇)
  9. 内蒙古自治区乌兰察布市谷歌高清卫星地图下载(百度网盘离线包下载)
  10. 注册成功邮件html代码模板
  11. @自我怀疑的开发者:你够优秀吗?
  12. 小小知识点(十九)护眼色豆沙绿的设置
  13. 树模型知识点(1)——决策树
  14. Honeywell RTU2020使用.软件篇
  15. 川土微电子携CA-IS3062W 突围高端隔离器模拟芯片市场
  16. C++ Learning 3
  17. Jenkins配置流水线
  18. 基于51单片机的温度报警系统(程序分装)
  19. Vue浏览器图标修改不起作用
  20. qttabbar关闭所有的标签怎么设置不关闭窗口

热门文章

  1. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第1章-绪论
  2. 2.12 总结-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
  4. STM32 基础系列教程 6 - PWM
  5. u-boot分析之两阶段代码分析(三)
  6. 【PC工具】更新文件夹多文件群体比较工具WinMerge
  7. Laravel 中简约而不简单的 Macroable 宏指令 1
  8. Xamarin只言片语2——Xamarin下的web api操作
  9. CentOS 7 为firewalld添加开放端口及相关资料
  10. 使用wireshark分析tcp/ip报文之报文头