Queueテンプレートクラス
3509 ワード
#include
using namespace std;
/* */
template
class Queue;
/* */
template
ostream & operator< &q);
/* , , */
template
class QueueItem
{
friend class Queue;
friend ostream& operator<< (ostream &os,const Queue&q);
QueueItem(const Type &t):item(t),next(0){}
Type item;
QueueItem *next;
};
/* */
template
class Queue{
friend ostream& operator<< (ostream &os,const Queue&q);
public:
Queue():head(0),tail(0){
cout<item;
}
const Type &front()const
{
return head->item;
}
int size()
{
int size=0;
QueueItem *p=head;
while(p)
{
p=p->next;
size++;
}
return size;
}
private:
QueueItem *head;
QueueItem *tail;
void destroy();
void copy_elems(const Queue&);
};
/* */
template
void Queue::destroy()
{
while(!empty())
pop();
}
template
void Queue::pop()
{
QueueItem *p=head;
head=head->next;
delete p;
}
template
void Queue::push(const Type &val)
{
QueueItem *p=new QueueItem(val);
if(empty())
head=tail=p;
else
{
tail->next=p;
tail=p;
}
}
/* */
template
void Queue::copy_elems(const Queue &orig)
{
for(QueueItem *p=orig.head;p;p=p->next)
push(p->item);
}
template
Queue & Queue::operator =(const Queue &rhs)
{
destroy();
copy_elems(rhs);
cout<
ostream & operator< &q)
{
os< *p;
for(p=q.head;p;p=p->next)
{
os<item<";
return os;
}
int main(){
Queue q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
Queue p;
p=q;
Queue r(p);
cout<
#include
#include
using namespace std;
template
class Queue;
template
ostream & operator< & val);
template
class Queue{
friend ostream &operator<< (ostream &os,const Queue &val);
public:
Queue()
{
if(debug==1)
cout<l=rhs.l;
}
if(debug==1)
cout<
Queue(It beg,It end);
template
void Assign(It beg,It end);
private:
list l;
const static int debug=0;
};
/* */
template
template
void Queue::Assign(It beg,It end)
{
l.assign(beg,end);
}
/* */
template
template
Queue::Queue(It beg, It end)
{
l.assign(beg,end);
}
template
ostream &operator< & q)
{
os<::const_iterator it=q.l.begin();
while(it!=q.l.end())
os<";
return os;
}
int main(){
Queue q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
cout< p(q);
Queue r;
r=q;
cout<(a,a+4);
cout<