类模板的简单用法
本次作业需要你实现一个用于存储整型数据的队列类(class IntQueue)。
要求如下:
产生队列的时候可以指定队列的大小,默认的大小是最大10个元素,。
出于简单考虑,本次作业中实现队列用数组方式就可以了。
注意完成合适的构造函数和析构函数,不要产生内存泄漏。
需实现的基本功能(类IntQueue的成员函数):
1. bool EnQueue (int ); 将一个整型数据放进队列,需要根据队列大小情况向用户给出提示
2. int DeQueue (); 返回位于队列第一个位置的数据,并将该数据移出队列
3. int Peek () const; 返回位于队列第一个位置的数据,但不将其移出队列
4. int GetSize () const; 返回队列现有的数据个数
5. void Display () const; 在屏幕上输出现有队列中的所有数据
代码包含三个文件:Queue.h,Queue.cpp,Main.cpp
所以在main文件里包含了cpp文件,是因为模板类方法必须跟实例在一起,否则会出现解析错误。或者把cpp里面的方法跟头文件放在一起
Queue.h代码如下:
View Code
1 #ifndef _QUEUE_H_ 2 #define _QUEUE_H_ 3 4 5 template <class T> 6 class Queue 7 { 8 public: 9 Queue(int iCount = 10); 10 ~Queue(); 11 bool EnQueue(T value); 12 T DeQueue(); 13 T Peek() const; 14 T GetSize() const; 15 void Display() const; 16 private: 17 T* _pQueue; 18 int _iSize; 19 int _iNum; 20 }; 21 22 #endif
Queue.cpp代码如下:
View Code
1 #include "Queue.h" 2 #include <iostream> 3 4 template <class T> Queue<T>::Queue(int iCount) : _pQueue(NULL), _iSize(0), _iNum(iCount) 5 { 6 _pQueue = new T[iCount]; 7 } 8 template <class T> Queue<T>::~Queue() 9 { 10 if (NULL != _pQueue) 11 { 12 delete []_pQueue; 13 _pQueue = NULL; 14 } 15 } 16 template <class T> bool Queue<T>::EnQueue(T value) 17 { 18 if (_iSize >= _iNum) 19 { 20 return false; 21 } 22 23 for (int i = _iSize; i > 0; i--) 24 { 25 *(_pQueue + i) = *(_pQueue + i - 1); 26 } 27 *_pQueue = value; 28 _iSize++; 29 return true; 30 } 31 template <class T> T Queue<T>::DeQueue() 32 { 33 _iSize--; 34 return *(_pQueue + _iSize + 1); 35 } 36 template <class T> T Queue<T>::Peek() const 37 { 38 return *(_pQueue + _iSize); 39 } 40 template <class T> T Queue<T>::GetSize() const 41 { 42 return _iSize; 43 } 44 template <class T> void Queue<T>::Display() const 45 { 46 for (int i = _iSize - 1; i >= 0; i--) 47 { 48 std::cout << *(_pQueue + i) << std::endl; 49 } 50 }
Main.cpp代码如下:
View Code
1 #include <cstdlib> 2 #include <stdio.h> 3 #include "Queue.h" 4 #include "Queue.cpp" 5 6 int main(int argc, char** argv) 7 { 8 Queue<int> m_Queue; 9 m_Queue.EnQueue(0); 10 m_Queue.EnQueue(1); 11 m_Queue.EnQueue(2); 12 m_Queue.EnQueue(3); 13 m_Queue.EnQueue(4); 14 m_Queue.EnQueue(5); 15 m_Queue.EnQueue(6); 16 m_Queue.EnQueue(7); 17 m_Queue.EnQueue(8); 18 //m_Queue.EnQueue(9); 19 // m_Queue.DeQueue(); 20 m_Queue.DeQueue(); 21 m_Queue.Display(); 22 getchar(); 23 return EXIT_SUCCESS; 24 }