读书人

用list实现queue模板的一个有关问题

发布时间: 2012-07-28 12:25:13 作者: rapoo

用list实现queue模板的一个问题
这个问题出自C++Primer的习题的16.44
#ifndef QUEUE_H
#define QUEUE_H


#include <iostream>
#include <list>

using namespace std;

template <class Type> class Queue;

template <class Type>
std::ostream& operator<<(std::ostream&,const Queue<Type>&);

template <class Type> class Queue
{
friend std::ostream& operator<< <Type>(std::ostream&,const Queue<Type>&);
public:
//构造函数:空函数,编译器会调用list的构造函数来初始化数据成员
Queue() {}
//接受一对迭代器来初始化:表用list的初始化函数
template <class It> Queue(It beg,It end):items(beg,end){}
template <class Iter> void assign(Iter beg,Iter end)
{
items.assign(beg,end);
}

//返回队列的第一个元素
Type& front()
{
return items.front();
}

const Type &front()const
{
return items.front();
}

void push(const Type &t)
{
items.push_back(t);
}

void pop()
{
items.erase(items.begin());
}

bool empty()const
{
return items.empty();
}
private:
std::list<Type> items;
};

template <class Type>
std::ostream& operator<<(std::ostream &os,const Queue<Type> &q)
{
os<<"<";
typename std::list<Type>::const_iterator beg = q.items.begin();
while(beg != q.items.end())
{
os<<*beg<<" "
++beg;
}
os<<">";
return os;
}

#endif
但是程序的重载<<操作符却有问题,但我又实在看不出来。麻烦大家看看吧!

[解决办法]
os<<*beg<<" "
++beg;

分号少了个...

os<<*beg<<" ";
++beg;
[解决办法]
list和queue可是两种结构哦
[解决办法]
定义和声名不要分开,这样会很乱

读书人网 >C++

热点推荐