數據結構C++(6)隊列——vector實現(vectorQueue)


異常類 同 數據結構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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM