我对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的第一篇文章,对于我的文章难以理解,我深表歉意。