C++数组队列
C++ queue with arrays
我正在尝试将动态数组传递给函数,添加两个值,然后在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
而不是int
s,并将数组大小增加到 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
或类似的东西。
相关文章:
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 堆栈和队列是否像C++中的数组一样传递?
- C++数组队列实现方法错误
- C++数组队列
- 如何通过 malloc 为队列数组分配内存?
- 队列数组指针 (C++)
- 链表数组(5 个队列)
- 队列验证层错误:队列族索引在 pCreateInfo->pQueueCreateInfos 数组中不是唯一的
- 如何删除在没有STL的队列中存储在数组中的第一个字符串元素
- 在队列中存储字符数组
- 无法修改数组中对象的队列
- 如何在队列中存储数组
- 为什么我会在数组队列程序中获得不希望的输出
- C++ 中的队列容器数组
- 使用链表C++数组的优先级队列
- 具有可变大小的C++全局队列数组
- 队列模拟的数组与双链表
- 从庸医(队列/堆栈)中包含的圆形数组顶部弹出一个项目
- 队列的数组实现:奇怪的输出
- 如何在C++中有效地将整个队列复制到向量/数组