动态更改队列的数组大小

时间:2019-02-01 05:23:07

标签: c++ class queue

我对C ++还是相当陌生,我正在尝试实现队列的入队功能,如果该阵列要满,则创建一个新数组,其大小是旧数组容量的两倍,并复制所有元素结束并删除旧数组。总体上,我仍然对理解类和C ++的语法有困难,因此不胜感激。

我不太了解的一些事情是,要创建一个将初始数组大小增加一倍的新数组时,正在使一个等于初始大小* 2的新整数值成为可行的选择(在我的入队功能)?当我尝试在新的队列objct'new_queue'中(在我的入队功能中)传递elementCount时,它指出错误:

no instance of constructor "Queue::Queue" matches the argument list 
-- argument types are: (unsigned int, int, int, unsigned int). 

elementCount不是整数吗?为什么将其传递给构造函数无效?

有了这个新创建的对象“ new_queue”,默认情况下,来自主函数的用户是否仍会排队进入这个新数组,还是我必须做些其他事情?我也将在下面链接主文件,如果在此我要问的内容没有任何意义,我深表歉意。

我应该将哪些数据而不是elementCount传递给构造函数参数?

Queue.h

class Queue {
    private:
        static unsigned const INITIAL_SIZE = 6;
        int* elements[INITIAL_SIZE];

        unsigned elementCount;  
        unsigned capacity;     
        unsigned frontindex;
        unsigned backindex;  

    public:
        // Desc:  Constructor
        Queue();


        ~Queue();

Queue.cpp

// Desc:  Constructor
Queue::Queue() : elementCount(0), capacity(INITIAL_SIZE), 
frontindex(0), backindex(0) {
} // constructor

void Queue::enqueue(int x) {
    if (backindex == capacity) {
        int new_initial = INITIAL_SIZE * 2;
        Queue new_queue(elementCount, new_initial, 0, backindex+1);
        for (int i = 0; i < elementCount; i++) {
            new_queue.elements[i] = elements[i];
            //How do I delete the old array here?
        }
    }
    else {
        elementCount++;
        *elements[backindex] = x;
        backindex = (backindex + 1) % capacity;
    }
} // enqueue


int main () {
    Queue Q;

    // enqueue 1, 2, 3, 4, 5
    for (int i = 1; i <= 5; i++) {
        Q.enqueue(i);
        cout << "enqueue " << i << endl;
    }
    // dequeue 2x elements
    for (int i = 0; i < 2; i++) {
        int y = Q.peek();
        Q.dequeue();
        cout << "peek " << y << endl;
    }
    // enqueue 6, 7, 8, 9, 10
    for (int i = 6; i <= 10; i++) {
        Q.enqueue(i);
        cout << "enqueue " << i << endl;
    }
    // dequeue all elements
    while (!Q.isEmpty()) {
        int y = Q.peek();
        Q.dequeue();
        cout << "peek " << y << endl;
    }
    return 0;
}

我将非常感谢我为避免不良做法而可以开始实施的任何反馈和更改。谢谢大家,这是我关于stackoverflow的第一篇文章,对于我的文章难以理解,我深表歉意。

0 个答案:

没有答案