Динамически изменяющийся размер массива для очередей - PullRequest
0 голосов
/ 01 февраля 2019

Я довольно новичок в C ++ и пытаюсь реализовать функцию enqueue очереди, в которой, если массив должен быть заполнен, создать новый массив, в два раза превышающий емкость старого массива, скопировать все элементыи удалите старый массив.У меня все еще есть проблемы с пониманием синтаксиса Classes и C ++ в целом, поэтому любая информация будет принята с благодарностью.

Некоторые вещи, которые я не очень хорошо понимаю, касаются создания нового массивадвойного размера исходного массива, делает ли новое целочисленное значение, равное начальному размеру * 2, жизнеспособным вариантом (в моей функции enqueue)?Когда я пытаюсь передать elementCount в моем новом объекте Queue 'new_queue' (в моей функции enqueue), он сообщает об ошибке:

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. Я извиняюсь, если мой пост трудно понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...