【发布时间】:2018-08-30 14:52:05
【问题描述】:
尝试在 C++ 中实现通用队列时,我遇到了一个非常具体的问题。代码如下:
template <class T> class Queue {
private:
T * queue;
int front;
int back;
int MAX_SIZE;
public:
Queue(){
Queue(SOME_PREDEFINED_CONSTANT);
}
Queue(int size){
queue = new T[size];
MAX_SIZE = size;
front = 0;
back = 0;
cout << "inside constructor:" << " back= " << back << " front=" << front << endl;
}
void push(const T entry){
if(back < MAX_SIZE){
queue[back] = entry;
back++;
}
}
T peek(){
return queue[front];
}
void pop(){
if(size() > 0){
front++;
}
if(front==back){
front = 0;
back = 0;
}
}
int size(){
cout << "size:" << " back=" << back << " front=" << front << endl;
return (back-front);
}
};
当我初始化队列时,像这样:Queue <int> q;,我在构造函数中得到了back 和front 的正确值;输出:
内部构造函数:back=0 front=0
但是当我询问队列的大小时,例如:q.size()(没有任何推送/弹出操作),我得到了非常奇怪的 back 和 front 值。一个样本输出:
尺寸:背面=32766 正面=-746749592
谁能指出我在这里做错了什么?
【问题讨论】:
-
这个:
Queue(){ Queue(SOME_PREDEFINED_CONSTANT);没有做你认为它正在做的事情。 -
Queue() : Queue(SOME_PREDEFINED_CONSTANT) {}如所写,您的默认构造函数不会初始化任何成员。在它的主体中,它创建并立即丢弃一个临时的Queue,它的效果为零。 -
除了@Igor:
Queue(int size = SOME_PREDEFINED_CONSTANT)实现了和“二合一”一样的效果。如果Queue是不带参数构造的,则默认使用SOME_PREDEFINED_CONSTANT。