1 没有使用模板的栈实现

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class Stack
  6. {
  7. public:
  8. Stack(int size = );
  9. ~Stack();
  10. bool isEmpty();
  11. bool isFull();
  12. void push(int data);
  13. int pop();
  14. private:
  15. int* space;
  16. int top;
  17.  
  18. };
  19.  
  20. Stack::Stack(int size)
  21. {
  22. space = new int(size);
  23. top = ;
  24. }
  25. Stack::~Stack()
  26. {
  27. delete[]space;
  28. }
  29. bool Stack::isEmpty()
  30. {
  31. return top == ;
  32. }
  33. bool Stack::isFull()
  34. {
  35. return top == ;
  36. }
  37. void Stack::push(int data)
  38. {
  39. space[top++] = data;
  40. }
  41. int Stack::pop()
  42. {
  43. return space[--top];
  44. }
  45.  
  46. int main()
  47. {
  48. Stack s();
  49. int i = ;
  50. /*if (!s.isFull())
  51. {
  52. s.push(10);
  53. }*/
  54. while (!s.isFull()&&i<)
  55. {
  56. s.push(i);
  57. i+=;
  58. }
  59. i = ;
  60. while (!s.isEmpty()&&i<)
  61. {
  62. cout << s.pop() << endl;
  63. i += ;
  64. }
  65. cin.get();
  66. return ;
  67. }

2 使用模板以后的栈实现

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. template<typename T>
  6. class Stack
  7. {
  8. public:
  9. Stack(int size)
  10. {
  11. space = new T[size];
  12. top = ;
  13. }
  14. ~Stack();
  15. bool isEmpty();
  16. bool isFull();
  17. void push(T data);
  18. T pop();
  19. private:
  20. T* space;
  21. int top;
  22.  
  23. };
  24.  
  25. template<typename T>
  26. Stack<T>::~Stack()
  27. {
  28. delete[]space;
  29. }
  30. template<typename T>
  31. bool Stack<T>::isEmpty()
  32. {
  33. return top == ;
  34. }
  35. template<typename T>
  36. bool Stack<T>::isFull()
  37. {
  38. return top == ;
  39. }
  40. template<typename T>
  41. void Stack<T>::push(T data)
  42. {
  43. space[top++] = data;
  44. }
  45. template<typename T>
  46. T Stack<T>::pop()
  47. {
  48. return space[--top];
  49. }
  50.  
  51. int main()
  52. {
  53. Stack<double> s();
  54. if (!s.isFull())
  55. s.push(10.4);
  56. if (!s.isFull())
  57. s.push(10.5);
  58. if (!s.isFull())
  59. s.push(10.6);
  60. if (!s.isFull())
  61. s.push(10.7);
  62. if (!s.isFull())
  63. s.push(10.8);
  64. if (!s.isFull())
  65. s.push(10.9);
  66.  
  67. Stack<string> s1();
  68. if (!s1.isFull())
  69. s1.push("ni");
  70. if (!s1.isFull())
  71. s1.push("hao");
  72.  
  73. while (!s1.isEmpty())
  74. {
  75. cout << s1.pop() << endl;
  76.  
  77. }
  78. cin.get();
  79. return ;
  80. }

可以其他类型可以自己多敲敲哦

c++函数模板二栈实现的更多相关文章

  1. C++ 函数模板二(函数模板重载)

    //函数模板重载 #include<iostream> using namespace std; /* 函数模板会进行严格的类型匹配,模板类型不提供隐式类型转化 普通函数能够进行自动类型转 ...

  2. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    C#中的函数式编程:递归与纯函数(二)   在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...

  3. C++实验二——函数重载、函数模板、简单类的定义和实现

    一.实验过程 函数重载编程练习 实验要求:编写重载函数add(),实现对int型,double型,complex型数据的加法.在main函数中定义不同类型的数据,调用测试. 代码实现: 先是简单的体验 ...

  4. 【C++】模板简述(二):函数模板

    我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ...

  5. C++(四十二) — 函数模板多态

     1.函数模板(参数多态) 相当于一个函数发生器,参数多态,可以重载. 普通函数和模板函数的本质区别: 普通函数的调用,可以进行隐式的类型转换: 函数模板的调用,使用类型参数化,严格按照类型进行匹配, ...

  6. C++学习笔记2_函数.函数指针.函数模板

    1. 内联函数void printAB(int a,int b){ cout<<(a)<<(b)<<endl;}int main(void){ for(int i= ...

  7. Lua函数之二

    Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...

  8. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  9. C++学习笔记之模板(1)——从函数重载到函数模板

    一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...

随机推荐

  1. 5分钟快速入门Markdown

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写 ...

  2. MVC入门——删除页

    添加Action DeleteUserInfo using System; using System.Collections.Generic; using System.Linq; using Sys ...

  3. Java面向对象编程(一)

    由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...

  4. EasyDarwin开源平台直播架构

    Created with Raphaël 2.1.0ClientClientEasyCMSEasyCMSEasyCameraEasyCameraEasyDarwinEasyDarwin请求设备列表设备 ...

  5. 九度OJ 1103:二次方程计算器 (解方程)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2804 解决:633 题目描述: 设计一个二次方程计算器 输入: 每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式. 输 ...

  6. gitlab 外网 无法访问 查端口 看文档

    云服务器安装成功后 curl   页面可以正常跳转 重置密码的token  页面可以生成 但是  外网无法 访问 [root@test ~]# curl 127.0.0.1:18021 <htm ...

  7. Srvctl命令具体解释(10g)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lovedieya/article/details/28169481 Srvctl命令   Srvct ...

  8. 重新认识vue之事件阻止冒泡

    冒泡的表现 近期用vue做了一个需求,大概是同一个区域,点击不同位置有不同的响应函数,还有个总的响应函数,好吧,如下图所示: 他们的DOM结构如下: <div v-for="(item ...

  9. 动态区间第K大

    整体二分. 主要需要注意的一点是,对于每个删除操作,若删除操作被算入贡献,则最开始的插入操作也一定会被算入,所以不必担心删除删错. #include<cstdio> #include< ...

  10. require实现单页应用程序(SPA)

    写了一个测试代码,用require.js配合它的一个插件text.js实现了最简单的单页应用程序,简单的记录一下,方便以后复习, git地址:https://github.com/lily1010/r ...