C++数组队列

C++ queue with arrays

本文关键字:队列 数组 C++      更新时间:2023-10-16

我正在尝试将动态数组传递给函数,添加两个值,然后在main中打印它们。我目前的编译只打印"这里"。我哪里做错了?

#include <iostream>
using namespace std;
void enqueue(int v1, int v2,char *q,int &size); //push value to back of 
queue
void dequeue(); //delete value @ q[0]
int main(){
int size = 0;
char* q = new char[size];
enqueue(1,2,q,size);
cout << q[2] << endl;
for (int i=0; i<size; i++){
cout <<q[i];
}
}
void enqueue(int v1,int v2, char *q,int &size){
cout << "here" << endl;
size++;
q[size]=v1;
size++;
q[size]=v2;
}
enter code here

首先,你分配一个大小为 0 的数组,你需要指定一个你可以使用的大小(至少 3,因为你正在访问 q[2]。其次,我假设你想打印一个数字,而不是一个字符,所以代替

cout << q[i];

cout << (int)q[i];

将其转换为整数并将打印一个数字。

这将打印垃圾值,因为您尚未为数组分配内存(初始大小为 0(。如果您正在寻找更多类似于 vector(在 STL 中(的动态数组,您需要记住数组的容量(它可以存储多少个元素(和当前大小(数组中的元素数量(。因此,每次插入之前,您都需要检查是否有剩余空间(容量 - 当前大小(,如果没有,则重新分配。显然,内存重新分配非常昂贵,因此在初始分配和随后的重新分配方面应该有一个平衡。

要修复您的代码,请在排队之前为元素数分配内存。

您还可以将函数enqueue()更改为接收两个char而不是ints,并将数组大小增加到 2 并在添加值后递增(数组通常以 0 开头(。

这里的代码:

#include <iostream>
using namespace std;
void enqueue(char v1, char v2,char *q,int &size); //push value to back of
void dequeue(); //delete value @ q[0]
int main(){
int size = 2;
char* q = new char[size];
enqueue('1','2',q,size);
cout << q[2] << endl;
for (int i=0; i<size; i++){
cout <<q[i];
}
}
void enqueue(char v1,char v2, char *q,int &size){
cout << "here" << endl;
q[size]=v1;
size++;
q[size]=v2;
size++;
}

澄清一下,这不是一个动态数组!它的固定大小为两个。在您的情况下,您可以查看类似std::queue或类似的东西。