具有数组的C ++队列

时间:2018-10-09 05:57:05

标签: c++

我试图将动态数组传递给函数,添加两个值,然后在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

3 个答案:

答案 0 :(得分:1)

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

cout << q[i];

cout << (int)q[i];

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您还可以将函数enqueue()更改为接收两个char而不是int,并将数组大小增加为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之类的东西。