c++函数模板二栈实现

1 没有使用模板的栈实现

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

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 = 0;
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 == 0;
34 }
35 template<typename T>
36 bool Stack<T>::isFull()
37 {
38     return top == 1024;
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(100);
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(100);
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 1;
80 }

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

时间: 2024-11-03 21:31:27

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

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

//函数模板重载 #include<iostream> using namespace std; /* 函数模板会进行严格的类型匹配,模板类型不提供隐式类型转化 普通函数能够进行自动类型转换 */ /* 函数模板重载四大规则 1 函数模板可以像普通函数一样被重载 2 C++编译器优先考虑普通函数 3 如果函数模板可以产生一个更好的匹配,那么选择模板 4 可以通过空模板实参列表的语法限定编译器只通过模板匹配 */ template<typename T> void Test1(T a

sdut 面向对象程序设计上机练习二(函数模板)

面向对象程序设计上机练习二(函数模板) Time Limit: 1000MS Memory limit: 65536K 题目描述 利用数组和函数模板求5个数最大值(分别考虑整数.单精度.长整数的情况). 输入 分别输入5个int型整数.5个float 型实数.5个long型正整数. 输出 分别输出5个int型整数的最大值.5个float 型实数的最大值.5个long型正整数的最大值. 示例输入 11 22 666 44 55 11.11 22.22 33.33 888.88 55.55 1234

面向对象程序设计上机练习二(函数模板)

面向对象程序设计上机练习二(函数模板) Time Limit: 1000MS Memory limit: 65536K 题目描述 利用数组和函数模板求5个数最大值(分别考虑整数.单精度.长整数的情况). 输入 分别输入5个int型整数.5个float 型实数.5个long型正整数. 输出 分别输出5个int型整数的最大值.5个float 型实数的最大值.5个long型正整数的最大值. 示例输入 11 22 666 44 55 11.11 22.22 33.33 888.88 55.55 1234

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

我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1, typename Param2,...,class Paramn> 返回值类型 函数名(参数列表){ ... } 二.函数模板的实例 //T表示类型,具体是什么不知道,实例化的时候才知道 //typename可以用class代替,但推荐使用typename //注意:typename不能用struc

C++学习之模板 ----函数模板、类模板

本博文主要讨论函数模板与类模板以及其简单应用. 1).作用:函数模板和类模板都可以看做是一种代码产生器,往里面放入具体的类型,得到具体化的函数或者class. 2).编译(分为两步): a):实例化之前,先检查模板本身语法是否正确: b):根据 函数调用或者类模板调用 ,先去实例化模板代码,产生具体的函数/类. 也就是说, 没有函数调用或者类类型对象声明,就不会实例化模板代码,在目标文件obj中找不到模板的痕迹. 3):优缺点 模板的缺点是代码膨胀,编译速度慢,而优点是运行速度快. 一.函数模板

快速排序函数模板

这段时间对STL比较痴迷,遂做了些许研究,今天把原来写过的快速排序算法用模板函数重新写了一下,把代码贴出来分享一下 有两个版本,版本二可以传入比较器,自己定义排序规则 快速排序算法思路: 1)从序列中选出一个元素作为基准: 2)重排序列,所有比基准小的元素位于基准左侧,比基准大的元素位于基准右侧,和基准相等的元素位于任意一侧,此过程称为分组: 3)以递归的方式对小于基准的分组和大于基准的分组分别进行排序. #include <vector> #include <list> //打印

C++模板学习:函数模板、结构体模板、类模板

C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(int a,int b) { return a+b; } //实现了整数的相加 //如果再想同时实现小数的相加,就再多写个小数的相加.普通实现我就不写了,知道函数重载的童鞋们会这样写: int sum(int a,int b) {//第一个function return a+b;} double su

模板(二) 模板语法

一.模板参数列表 模板参数列表是一个逗号分隔的一个或者多个模板参数的列表: template<typename T, typename U> 如上所示,typename T和typename U为模板参数: 二.模板参数 模板参数分为模板类型参数与非类型模板参数两种: 1)模板类型参数:模板类型参数可以看做类型说明符,可以向类类型说明符和内置类型一样使用: 2)非类型模板参数:非类型模板参数可以是一个整型,或者一个指向对象或者函数类型的指针或引用:非类型模板参数用来表示一个值, 需要通过一个特

忍不住吐槽类模板、模板类、函数模板、模板函数

最近在查资料,发现了一些blog上写"类模板.模板类.函数模板.模板函数的区别"之类的文章.一看之下,闭起眼睛想想,自己写了这么久C++,知道模板,知道函数,也知道类.如果单独问我,类模板或者模板类,我都认为是采用了模板的类.但不知道这"类模板.模板类.函数模板.模板函数"是什么东西. 仔细看了下文章,忍不住吐槽了.其实就是采用模板的类叫类模板,实例化后叫模板类.采用模板的函数叫函数模板,实例化后叫模板函数.好吧,你赢了.知道模板的都会知道,模板实例化后会由编译器生