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