[C++]queue简单实现--关于模板
2016-03-05 10:00
701 查看
#include <iostream> #include <vector> using namespace std; template <class Type> class Queueitem { template <class type> friend class Queue; Queueitem(const Type &t) : item(t), next(0) {} Type item; Queueitem *next; }; template <class type> class Queue { public: // template <class Type> friend class Queueitem; Queue() : head(0), tail(0) {} Queue(const Queue &t) : head(0), tail(0) { copy_elems(t); } Queue& operator=(const Queue&); ~Queue() { destory(); } template <class It> Queue(It beg, It end) : head(0), tail(0) { copy_elems(beg, end); } type& front() { return head->item; } const type& front() const { return head->item; } void push(const type &); void pop(); bool empty() const { return head == 0; } private: Queueitem<type> *head; Queueitem<type> *tail; void destory(); void copy_elems(const Queue &); template <class Iter> void copy_elems(Iter beg, Iter end) { Iter it; for (it = beg; it != end; it++) { push(*it); } } }; template<class type> class Queue; template <class type> void Queue<type>::destory() { while (!empty()) { pop(); } } template <class type> void Queue<type>::pop() { Queueitem<type> *p = head; head = head->next; delete p; } template <class type> void Queue<type>::push(const type &t) { Queueitem<type> *pt = new Queueitem<type>(t); if (empty()) { head = tail = pt; } else { tail->next = pt; tail = pt; } } template <class type> void Queue<type>::copy_elems(const Queue<type> &orig) { for (Queueitem<type> *pt = orig.head; pt; pt = pt->next) { push(pt->item); } } template <class type> Queue<type>& Queue<type>::operator=(const Queue<type> &orig) { Queue<type> it; it.copy_elems(orig); return it; } int main() { // Queue<int> qi; vector<short> a; a.push_back(12); a.push_back(13); a.push_back(14); Queue<int> qi(a.begin(), a.end()); cout << qi.front() << endl; return 0; }
相关文章推荐
- C++智能指针作为成员变量的用法
- 举例解析设计模式中的工厂方法模式在C++编程中的运用
- 单链表(c++实现)
- 统计某个字符串中的标点符号数(c++11)
- 更安全的C语言字符串处理函数
- VC++调用C#生成DLL的两种方法!
- 二维指针控制指向NULL的一维指针
- C语言——宏定义
- C++多重继承与void*指针转换问题
- C++设计模式之建造者模式
- 拷贝构造函数的参数为什么必须使用引用类型
- C++获取随机数的办法
- DSP 2812: 使用C++实现的SCI从动站程序框架
- C/C++ 如何遍历文件夹中最大的那一个文件
- 异常安全,RAII与C++11
- C/C++中的'\0'
- c++中一个关于模板的小例子
- C++中构造函数能调用虚函数吗?(转)
- C/C++调用java---JNI常用函数
- DSP 2812: 使用C++实现的SCI主动站程序框架