模板参数和模板的模板参数实现栈和队列

来源:互联网 发布:淘宝质量问题退货邮费 编辑:程序博客网 时间:2024/05/29 13:37
#include <iostream>using namespace std;//利用顺序表实现栈#if 0template <class T>class Stack{public:Stack():_ptr(new T[3]), _capacity(3), _size(0){}Stack(const T*arr, size_t sz):_ptr(new T[sz]), _capacity(sz), _size(sz){for (size_t i = 0; i < sz; i++){_ptr[i] = arr[i];}}//元素入栈void Push(T data){IncreaseCapacity();_ptr[_size] = data;_size++;}//元素出栈T& Pop(){return _ptr[_size-1];_size--;}//判空bool Empty(){if (Size())return true;return false;}size_t Capacity(){return _capacity;}//获取大小size_t Size(){return _size;}//获取栈顶元素size_t Top(){return _ptr[_size-1];}~Stack(){delete [] _ptr;_ptr = NULL;}private://增容void IncreaseCapacity(){size_t sz = Size();size_t capacity = Capacity();size_t newsize = capacity * 2 + 3;if (sz >= capacity){T*newptr = new T[newsize];for (int i = 0; i < sz; i++){newptr[i] = _ptr[i];}delete[] _ptr;_ptr = newptr;_capacity = newsize;}}private:T* _ptr;size_t _capacity;size_t _size;};void test(){int arr[3] = { 1, 2, 3 };int sz = sizeof(arr) / sizeof(arr[0]);Stack<int>s1;Stack<int>s2(arr, sz);s2.Push(4);s2.Push(5);cout<<s2.Empty()<<endl;cout<<s2.Pop()<<endl;cout<<s2.Size()<<endl;cout<<s2.Top()<<endl;}#endif//模板参数#include "List.h"#include "Vector.h"#if 0template<class T,class Container=Vector<T>>class Stack{public:Stack(){}//入栈void Push(const T&data){V.PushBack(data);}//出栈T& Pop(){return V.Back();V.PopBack();}//判空bool Empty()const{return V.Empty();}//栈顶  constT& Top(){return V.Back();}  size_t Size()const  {return  V.Size();  }         ~Stack(){}private:Container V;};void test(){//Stack<int, List<int>>s1;Stack<int>s1;cout<<s1.Empty()<<endl;s1.Push(4);s1.Push(5);s1.Push(6);cout<<s1.Size()<<endl;cout << s1.Top() << endl;cout << s1.Pop() << endl;}int main(){test();system("pause");return 0;}#endif//模板的模板参数#if 0template<class T,template<class >class Container=Vector>class Stack{public:Stack(){}//入栈void Push(const T&data){V.PushBack(data);}//出栈T& Pop(){return V.Back();V.PopBack();}//判空bool Empty()const{return V.Empty();}//栈顶constT& Top(){return V.Back();}size_t Size()const{return  V.Size();}   ~Stack(){}private:Container<T> V;};void test(){//Stack<int, List>s1;Stack<int>s1;cout << s1.Empty() << endl;s1.Push(4);s1.Push(5);s1.Push(6);cout << s1.Size() << endl;cout << s1.Top() << endl;cout << s1.Pop() << endl;}#endif//队列template<class T,class Container=List<T>>class Queue{public:Queue(){}~Queue(){}//入对列void Push(const T&data){V.PushBack(data);}//出队列T& Pop(){return V.Back();V.PopFront();}//判空bool Empty()const{return V.Empty();}size_t Size()const{return  V.Size();}private:Container V;};void test(){//Stack<int, List>s1;Queue<int>s1;cout << s1.Empty() << endl;s1.Push(4);s1.Push(5);s1.Push(6);cout << s1.Size() << endl;cout << s1.Pop() << endl;}int main(){test();system("pause");return 0;}

原创粉丝点击