c++ - 动态改变队列数组的大小
问题描述
我对 C++ 相当陌生,我正在尝试实现一个队列的入队函数,如果数组已满,则创建一个新数组,其大小是旧数组容量的两倍,复制所有元素并删除旧数组。我仍然无法理解类和 C++ 的整体语法,因此任何信息都将不胜感激。
我不太了解的一些事情是,在创建两倍于初始数组大小的新数组时,使一个等于初始大小 * 2 的新整数值成为一个可行的选项(在我的入队函数中)? 当我尝试在我的新队列对象“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 传递给构造函数参数?
队列.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();
队列.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上的第一篇文章,如果我的文章难以理解,我深表歉意。
解决方案
推荐阅读
- flutter - 在颤振中生成已发布的apk文件后出现问题
- ios - 在视图控制器之间传递动态数组?(以编程方式)
- java - 在 @BeforeStep 之前初始化测试中的 Mocks
- leaflet - 传单地图中不包含 TomTom 切片图层
- excel - ClearContents 删除超出范围的数据
- javascript - 从 python 后端获取数据
- visual-studio - 上下文菜单中的 Visual Studio DateTime 格式
- javascript - TypeScript 中的运算符 && 的工作方式是否与 Java 相同?
- azure - Azure SQL 数据库是否支持 Windows 身份验证?
- node.js - Sequelize 如何提出加入请求?