类模板Queue的实现
来源:互联网 发布:dj香烟淘宝链接 编辑:程序博客网 时间:2024/06/05 00:50
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 template <class Type> class Queue; 6 template <class T > ostream & operator << (ostream &os, const Queue<T> &); 7 8 template <class Type> class QueueItem { 9 friend class Queue<Type >; 10 friend ostream & operator << <Type> (ostream &os, const Queue<Type> &); 11 //private class 12 QueueItem(const Type &val) : Item(val), next(0) {} 13 Type Item; 14 QueueItem<Type > *next; 15 }; 16 17 template <class Type> class Queue { 18 friend ostream & operator << <Type> (ostream &os, const Queue<Type> &); 19 20 public: 21 Queue() : head(0), tail(0) {} 22 template <class It> Queue(It _beg, It _end) : head(0), tail(0) { copy_elems(_beg, _end); } 23 Queue(const Queue<Type> &Q) : head(0), tail(0) { copy_elems(Q); } 24 Queue& operator = (const Queue &Q); 25 ~Queue() { Destroy(); } 26 template <class Iter> void _assign(Iter, Iter); 27 Type &_front() { return head->Item; } 28 const Type &_front() const { return head->Item; } 29 void _push(const Type&); 30 void _pop(); 31 bool _empty() const { return head == 0; } 32 33 private: 34 QueueItem<Type> *head; 35 QueueItem<Type> *tail; 36 void Destroy(); 37 void copy_elems(const Queue<Type> &); 38 template <class Iter> void copy_elems(Iter, Iter); 39 }; 40 41 template <class Type> Queue<Type>& Queue<Type>::operator = (const Queue<Type> &q) 42 { 43 if (this != &q) { 44 head = tail = 0; 45 for (QueueItem<Type> *pt = q.head; pt; pt= pt->next) { 46 _push(pt->Item); 47 } 48 } 49 return *this; 50 } 51 52 template <class Type> void Queue<Type>::copy_elems(const Queue<Type> &q) 53 { 54 for (QueueItem<Type> *pt = q.head; pt; pt = pt->next) { 55 _push(pt->Item); 56 } 57 } 58 template <class Type> template <class Iter> void Queue<Type>::copy_elems(Iter _beg, Iter _end) 59 { 60 while (_beg != _end) { 61 _push(*_beg); 62 ++_beg; 63 } 64 } 65 66 template <class Type> template <class Iter> void Queue<Type>::_assign(Iter _beg, Iter _end) 67 { 68 head = tail = 0; 69 copy_elems(_beg, _end); 70 } 71 72 template <class Type> void Queue<Type>::_push(const Type& val) 73 { 74 QueueItem<Type> *p = new QueueItem<Type>(val); 75 if (_empty()) { 76 head = tail = p; 77 } else { 78 tail->next = p; 79 tail = p; 80 } 81 } 82 83 template <class Type> void Queue<Type>::_pop() 84 { 85 QueueItem<Type> *p = head; 86 head = head->next; 87 delete p; 88 } 89 90 template <class Type> ostream & operator << (ostream &os, const Queue<Type> &q) 91 { 92 for (QueueItem<Type> *pt = q.head; pt; pt = pt->next) { 93 os << pt->Item << " "; 94 } 95 os << endl; 96 return os; 97 } 98 99 template <class Type> void Queue<Type>::Destroy()100 {101 while (!_empty()) _pop();102 }103 104 105 int main()106 {107 Queue<int >que;108 que._push(1);109 que._push(2);110 que._push(3);111 que._push(4);112 cout << que;113 que._pop();114 cout << que;115 Queue<int >q2, q1(que);116 cout << q1;117 cout << q2._empty() << endl;118 q2 = q1;119 cout << q2;120 while (!que._empty()) {121 cout << que._front() << endl;122 que._pop();123 }124 vector<int > vet(10, 7);125 for (int i = 0; i < (int)vet.size(); i++) {126 cout << vet[i] << ' ';127 }128 cout << endl;129 que._assign(vet.begin(), vet.end());130 cout << que;131 return 0;132 }
0 0
- 类模板Queue的实现
- 类模板实现Queue
- C++primer 实现queue的模板类
- 自己实现的queue模板类
- 自定义类模板 实现Queue
- 使用模板类实现Queue
- 标准类库 queue模板类的简单实现
- Queue类模板的链表实现(基本功能)
- 模板类高效线程安全的实现Queue
- 简单模拟实现队列Queue的模板类
- C++ 实现自己queue模板类
- 模板实现简易queue
- C++模板与泛型(2.实现自己的Queue类模板)
- 队列(queue)的模板类及其成员函数的实现
- Queue模板类
- 模板队列Queue类
- Queue--C++模板类
- C# Queue模板类
- 汇编考试小结
- 单调队列,斜率优化dp 专题
- zoj 3644(dp + 记忆化搜索)
- 线段树专题训练
- 并查集中的合并、删除操作
- 类模板Queue的实现
- poj 1816 (Trie + dfs)
- AC自动机专题
- wireshark的严格检查,如tcp的校验码检查
- Mongodb集群搭建的三种方式
- 云计算给传统行业信息化变革带来的思考
- 比较好的学习资料
- 报文貌似不被处理的可能原因
- xcode4的环境变量,Build Settings参数,workspace及联编设置