c++ - 队列实现错误 C++

标签 c++ queue

<分区>

尝试在 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在构造函数中;输出:

inside constructor: back=0 front=0

但是当我询问队列的大小时,像这样:q.size() (没有任何推/弹出操作),我得到非常奇怪的值 backfront .一个示例输出:

size: back=32766 front=-746749592

谁能指出我在这里做错了什么?

最佳答案

当你做的时候

Queue(){
    Queue(SOME_PREDEFINED_CONSTANT);
}

发生的事情是,您在默认构造函数中创建了一个临时对象,该对象立即超出范围并被破坏。

有两种解决方法:

  1. 使用构造函数初始化列表和委派构造函数的"new"方式:

    Queue() : Queue(SOME_PREDEFINED_CONSTANT)
    { /* empty */ }
    
  2. 使用默认参数的“旧”方式:

    template <class T> class Queue  {
        ...
    
    public:
        Queue(int size = SOME_PREDEFINED_CONSTANT){
            ...
        }
        ...
    };
    

关于c++ - 队列实现错误 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49407121/

相关文章:

C# Azure 存储队列 - 从队列读取消息的更有效方法

c - 使用 C 中的队列评估前缀操作

algorithm - 为什么我们做 "implement a queue using 2 stacks"?

c++ - 具有灵活阵列成员的打包结构的可移植替代方案

c++ - boost any library的典型用法是什么?

c++ - 如何使用 SDL 在两个独立的声卡上播放声音?

c++ - C++ 中的 bool 括号

c++ - OpenGL 渲染到纹理看起来呈锯齿状

java - 按特定顺序合并两个队列的方法

java - 我可以使用什么数据结构或设计模式来解决这个问题