異常類 同 數據結構C++(1)線性表——數組實現(arrayList) 。
抽象基類 Queue 的定義在 Queue.h 中:
1 #pragma once
2 #include <iostream>
3 #include <sstream>
4 #include <string>
5 #include <ostream>
6 #include <vector>
7 #include <iterator>
8 #include "queue.h"
9 #include "myExceptions.h"
10
11
12 template<typename T>
13 class vectorQueue : public queue<T>
14 { 15 public: 16 vectorQueue(int initLenth = 20); 17 ~vectorQueue(); 18 bool empty() const; 19 int size() const; 20 T& front(); 21 T& back(); 22 void pop(); 23 void push(const T& theElement); 24
25 void output(std::ostream& out); 26 protected: 27 std::vector<T> *element; 28 }; 29
30 template<typename T>
31 vectorQueue<T>::vectorQueue(int initLenth) 32 { 33 if (0 >= initLenth) 34 { 35 std::ostringstream s; 36 s << "initLenth = " << initLenth << "must > 0" << endl; 37 throw illegalParameterValue(s.str()); 38 } 39 element = new vector<T>[initLenth]; 40 } 41
42 template<typename T>
43 vectorQueue<T>::~vectorQueue() 44 { 45 delete[] element; 46 } 47
48 template<typename T>
49 bool vectorQueue<T>::empty() const
50 { 51 return element->empty(); 52 } 53
54 template<typename T>
55 int vectorQueue<T>::size() const
56 { 57 return element->size(); 58 } 59
60 template<typename T>
61 T &vectorQueue<T>::front() 62 { 63 if (element->begin() == element->end()) 64 throw queueEmpty(); 65 return *(element->begin()); 66 } 67
68 template<typename T>
69 T &vectorQueue<T>::back() 70 { 71 return *(element->end() - 1); 72 } 73
74 template<typename T>
75 void vectorQueue<T>::pop() 76 { 77 if (element->empty()) 78 throw queueEmpty(); 79 element->erase(element->begin()); 80 } 81
82 template<typename T>
83 void vectorQueue<T>::push(const T& theElement) 84 { 85 element->push_back(theElement); 86 } 87
88 template<typename T>
89 void vectorQueue<T>::output(std::ostream& out) 90 { 91 copy(element->begin(), element->end(), std::ostream_iterator<T>(out, " ")); 92 } 93
94 template<typename T>
95 std::ostream &operator<<(std::ostream &cout, vectorQueue<T> &VectorQueue) 96 { 97 VectorQueue.output(cout); 98 return cout; 99 }
參考文獻:
[1].Sartaj Sahni. 數據結構、算法與應用[M]. 機械工業出版社, 2000.