C++ primer 模板与泛型编程
来源:互联网 发布:淘宝买的模板在哪里 编辑:程序博客网 时间:2024/06/11 19:58
继续浏览c++ primer 看到模板与泛型编程这章,就顺便把这几节的代码综合了下,对一个Queue队列模板的实现
贴一下代码(看完书,自己敲,忘记了哪再看下书)
#include <ostream>using std::ostream;//声明Queue的模板类template <class Type> class Queue;//声明模板函数template <class T> ostream& operator<<(ostream& , const Queue<T>&);//定义QueueItem的模板类template <class Type> class QueueItem{//定义友元模板类和友元模板函数friend class Queue<Type>;friend ostream& operator<< <Type>(ostream& , const Queue<Type>&);//QueueItem构造函数QueueItem(const Type &t):item(t),next(0){}QueueItem *next;Type item;};//定义Queue模板类template <class Type> class Queue{//定义友元模板函数friend ostream& operator<< <Type>(ostream& , const Queue<Type>&);public://构造函数Queue():head(0),tail(0){}template <class It> Queue(It beg, It end):head(0),tail(0){copy_elems(beg,end);}template <class Iter> void assign(Iter , Iter);//复制构造函数Queue(const Queue &object){head(0);tail(0);copy_elems(object);}//赋值操作符Queue& operator=(const Queue&);//析构函数~Queue(){destroy();}//push操作void push(const Type&);//pop操作void pop();//取队列头元素的操作frontType& front();//判断是否为空的操作bool empty(){return head==0;}private:QueueItem *head;QueueItem *tail;void destroy();void copy_elems(const Queue&);template <class Iter> void copy_elems(Iter , Iter);};//重载输出操作符template <class T> ostream& operator<<(ostream &os , const Queue<T> &object){os << "<";QueueItem *p;for(p=object.head;p!=object.tail;p=p->next){os <<p->item << " ";}os << ">" << endl;}//定义Queue模板类中的模板成员函数template<class Type> template <class Iter> void Queue<Type>::assign(Iter beg, Iter end){destroy();copy_elems(beg , end);}//定义Queue模板类中的copy_elems模板成员函数template <class Type> template <class Iter> void Queue<Type>::copy_elems(Iter beg, Iter end){while(beg != end){push(*beg);++beg;}}//Queue模板类中的copy_elems成员函数template <class Type> void Queue<Type>::copy_elems(const Queue &object){QueueItem<Type> *p;for(p=object.head;p&&p!=object.tail;p=p->next){push(p->item);}}//赋值操作符template <class Type> Queue<Type>& Queue<Type>::operator=(const Queue &rhs){if(&rhs != this){destroy();copy_elems(rhs);}return *this;}/*//另外一种用链表直接实现赋值操作符template <class Type> Queue<Type>& Queue<Type>::operator=(const Queue &rhs){QueueItem<Type> *p = rhs.head;while(p){QueueItem<Type> *q = new QueueItem<Type>(p->item);if(p == rhs.head){head = tail = q;}else{tail->next = q;tail = q;p=p->next;}}return *this;}*///push操作template <class Type> void Queue<Type>::push(const Type &value){QueueItem<Type> *p = new QueueItem<Type>(value);if(this->empty()){head = p;tail = p;}else{tail->next = p;tail = p;}}//pop操作template <class Type> void Queue<Type>::pop(){QueueItem<Type> *p;p=head;head = head->next;delete p;}//front操作template <class Type> Type& Queue<Type>::front(){return head->item;}//destory操作template <class Type> void Queue<Type>::destroy(){while(!empty()){pop();}}
0 0
- 《C++Primer》 3.19 模板与泛型编程
- 【c++primer】第十六章:模板与泛型编程
- c++primer要点-模板与泛型编程
- C++Primer---模板与泛型编程(一)
- C++Primer笔记 十六 模板与泛型编程
- C++primer阅读笔记----------模板与泛型编程
- C++primer阅读笔记-模板与泛型编程(重载与模板)
- C++ primer 模板与泛型编程
- C++primer 阅读笔记-模板与泛型编程(函数模板)
- C++primer 阅读笔记-模板与泛型编程(类模板)
- C++primer 阅读笔记-模板与泛型编程(模板参数)
- C++primer 阅读笔记-模板与泛型编程(成员模板)
- C++primer阅读笔记-模板与泛型编程(模板实参推断)
- C++primer阅读笔记-模板与泛型编程(可变参数模板)
- C++primer阅读笔记-模板与泛型编程(模板特例化)
- [C/C++] 第16章 模板与泛型编程 《 C++ Primer 》
- C++primer 阅读笔记-模板与泛型编程(效率与灵活性+)
- C++Primer习题解答——模板与泛型编程
- Android程序测试(1)——新建一个简单的测试工程来测试已有的工程
- 位图(bmp)文件格式分析
- 001sql server2005 主键自增设置 如何创建外键
- eclipse 断点调试
- 红黑树
- C++ primer 模板与泛型编程
- php5类中的__get()和__set()方法用于private私有属性
- Android 单元测试方法与步骤
- 2. 存储类型
- C++ stringstream介绍,使用方法与例子
- 重载多维数组下标 c++
- Java中 Map、Set、List的基本用法
- RedHat Enterprise Linux 5下Oracle11g安装并升级到11.2.0.3
- html颜色