您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: