数据结构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