16.4.6 完整的Queue类
//Queue.h
#ifndef QUEUE_H
#define QUEUE_H
#include "stdafx.h"
#include "QueueItem.h"
#include
using namespace std;
template
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();}
Type& front()
{return head->item;}
const Type &front() const{return head->item;}
void push(const Type &);
void pop();
bool empty() const
{return head==0;}
friend ostream &operator<<
template
Queue(It beg, It end):head(0), tail(0){copy_elems
template
void assign(Iter, Iter);
private:
QueueItem
QueueItem
void destroy();
void copy_elems(const Queue&);
template
void copy_elems(Iter,Iter);
};
template
while(!empty())
pop();
}
template
QueueItem
this->head=this->head->next;
delete p;
}
template
QueueItem
if(empty()){
pt->next=0;
head=tail=pt;
}
else{
this->tail->next=pt;
tail=pt;
}
}
template
void Queue
for(QueueItem
push(pt->item);
}
}
template
ostream& operator<<(ostream &os, const Queue
os<<"< ";
QueueItem
for(p=q.head;p!=0;p=p->next){
os<
}
os<<">";
return os;
}
template
template
void Queue
destroy();
copy_elems(beg,end);
}
#endif
//Queue.h
#ifndef QUEUE_H
#define QUEUE_H
#include "stdafx.h"
#include "QueueItem.h"
#include
using namespace std;
template
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();}
Type& front()
{return head->item;}
const Type &front() const{return head->item;}
void push(const Type &);
void pop();
bool empty() const
{return head==0;}
friend ostream &operator<<
template
Queue(It beg, It end):head(0), tail(0){copy_elems
template
void assign(Iter, Iter);
private:
QueueItem
QueueItem
void destroy();
void copy_elems(const Queue&);
template
void copy_elems(Iter,Iter);
};
template
while(!empty())
pop();
}
template
QueueItem
this->head=this->head->next;
delete p;
}
template
QueueItem
if(empty()){
pt->next=0;
head=tail=pt;
}
else{
this->tail->next=pt;
tail=pt;
}
}
template
void Queue
for(QueueItem
push(pt->item);
}
}
template
ostream& operator<<(ostream &os, const Queue
os<<"< ";
QueueItem
for(p=q.head;p!=0;p=p->next){
os<
}
os<<">";
return os;
}
template
template
void Queue
destroy();
copy_elems(beg,end);
}
#endif16.4.7 类模板的static成员
类模板可以像任何其他类一样声明static成员。
template
class Foo{
public:
static T count(){return ctr;}
private:
static T ctr;
};
template
T Foo
template
class Foo{
public:
static T count(){return ctr;}
private:
static T ctr;
};
template
T Foo
静态数据成员需要在类外