C++ 实现自己queue模板类
2014-12-03 12:39
351 查看
按照书上写了差不多的例子,程序一写发现好多语法问题,需要继续学习。
#include <iostream>
using namespace std;
template<class T> class queue;
template<class T> class item
{
friend class queue<T>;
private:
item(const T& val):value(val),next(0){} //带有一个参数的构造函数
item* next;
T value;
};
template<class T> class queue
{
public:
queue():head(0),tail(0){}
queue(const queue& q):head(0),tail(0)
{
copy_elems(q);
}
queue& operator=(const queue&);
~queue()
{
destroy();
}
const T& front(){ return head->value; }//将头部对象返回
void push(const T& t); //将对象加到尾部
void pop();//将对象从头部移除
bool empty() const { return head == 0; }
private:
item<T>* head;
item<T>* tail;
void copy_elems(const queue& q);
void destroy();
};
template<class T> void queue<T>::push(const T& t)
{
item<T>* tmp =new item<T>(t);
if(empty())
{
head = tail = tmp;
}
else
{
tail->next = tmp;
tail = tmp;
}
}
template<class T> void queue<T>::copy_elems(const queue& q)
{
item<T>* tmp = q.head;
for(; tmp!=q.tail->next; tmp = tmp->next)
push(tmp->value);
}
template<class T> queue<T>& queue<T>::operator=(const queue& q)//这里返回类型必须也是 queue<T>否则报错
{
destroy();//先销毁自己的元素
copy_elems(q);//复制过来新的
return *this;
}
template<class T> void queue<T>::destroy()
{
while(!empty())
pop();
}
template<class T> void queue<T>::pop()
{
item<T>* tmp = head;
head = head->next;
delete tmp;
}
int main(void)
{
queue<int> q;
q.push(12);
q.push(19);
cout<<q.front()<<endl;
q.pop();
cout<<q.front()<<endl;
q.pop();
if(q.empty())
cout<<"queue is empty now\n"<<endl;
return 0;
}
#include <iostream>
using namespace std;
template<class T> class queue;
template<class T> class item
{
friend class queue<T>;
private:
item(const T& val):value(val),next(0){} //带有一个参数的构造函数
item* next;
T value;
};
template<class T> class queue
{
public:
queue():head(0),tail(0){}
queue(const queue& q):head(0),tail(0)
{
copy_elems(q);
}
queue& operator=(const queue&);
~queue()
{
destroy();
}
const T& front(){ return head->value; }//将头部对象返回
void push(const T& t); //将对象加到尾部
void pop();//将对象从头部移除
bool empty() const { return head == 0; }
private:
item<T>* head;
item<T>* tail;
void copy_elems(const queue& q);
void destroy();
};
template<class T> void queue<T>::push(const T& t)
{
item<T>* tmp =new item<T>(t);
if(empty())
{
head = tail = tmp;
}
else
{
tail->next = tmp;
tail = tmp;
}
}
template<class T> void queue<T>::copy_elems(const queue& q)
{
item<T>* tmp = q.head;
for(; tmp!=q.tail->next; tmp = tmp->next)
push(tmp->value);
}
template<class T> queue<T>& queue<T>::operator=(const queue& q)//这里返回类型必须也是 queue<T>否则报错
{
destroy();//先销毁自己的元素
copy_elems(q);//复制过来新的
return *this;
}
template<class T> void queue<T>::destroy()
{
while(!empty())
pop();
}
template<class T> void queue<T>::pop()
{
item<T>* tmp = head;
head = head->next;
delete tmp;
}
int main(void)
{
queue<int> q;
q.push(12);
q.push(19);
cout<<q.front()<<endl;
q.pop();
cout<<q.front()<<endl;
q.pop();
if(q.empty())
cout<<"queue is empty now\n"<<endl;
return 0;
}
相关文章推荐
- 自己实现的queue模板类
- 通过Flash和c++的交互来实现自己的桌面游戏
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- 自己写的用c++实现的简单装饰者模式
- C++自己实现list
- 循环队列的实现(Queue, C++版)
- C++ 实现queue(队列)链表
- 自己实现的C++Trim()
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- C++ 用数组实现stack,queue
- 用C++实现自己的ORM框架
- C/C++实现如下 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++)
- 构建自己的C/C++插件开发框架(四)——核心层设计和实现
- 使用模板类实现Queue
- C++ Recipes 自己实现输出重定向
- 栈(C++模板类实现)
- C++primer 实现queue的模板类
- C++用数组和链表分别实现Queue
- 用C++ std::priority_queue 实现哈夫曼算法