gpt4 book ai didi

c++ - 制作动态循环队列,元素输出正常但程序崩溃?

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:14 25 4
gpt4 key购买 nike

程序编译得很好,但是当输出窗口出现时,它显示了我输出的元素,然后我听到窗口声音,然后就停止了。

我正在尝试将元素排入循环队列,看起来它们输入得很好,因为显示函数将它们打印出来。一切似乎都有意义,但程序有点崩溃,有人能详细说明为什么它会这样做吗?我的代码如下:

#include <iostream>
#include <algorithm>


using namespace std;

template<class QueueElement>
class dynamic_queue
{
public:
dynamic_queue(int = 10);
dynamic_queue(const dynamic_queue &);
~dynamic_queue();
QueueElement *getHead();
int getSize() const;
bool isEmpty()const;
int getCapacity();
void display(ostream &out) const;
void enqueue(const QueueElement &value);
void dequeue();
bool swap(dynamic_queue &, dynamic_queue &);
void clear();
const dynamic_queue & operator=(const dynamic_queue &);
friend ostream & operator<< <> (ostream &, const
dynamic_queue<dynamic_queue> &);
private:
int ihead;
int itail;
int initial_capacity;
int array_capacity;
int array_size;
QueueElement *myarray;
};


template<class QueueElement>
dynamic_queue<QueueElement>::dynamic_queue(int n)
:ihead(0),itail(0)
{

if (n <= 0)
{
initial_capacity = 1;
}
else
{
initial_capacity = max(n, 1);
}
array_capacity = initial_capacity;
myarray = new QueueElement(initial_capacity);
array_size = initial_capacity;


}

template<class QueueElement>
dynamic_queue<QueueElement>::~dynamic_queue()
{
delete[]myarray;
}

template<class QueueElement>

void dynamic_queue<QueueElement>::enqueue(const QueueElement &inserted_value
)
{
int newTail = (itail + 1) % array_capacity;
if (newTail != ihead)
{
myarray[itail] = inserted_value;
itail = newTail;
}
else
{
cout << "Queue is full" << endl;
exit(1);
}
cout << "itail: " << itail << endl;
cout << "array size" << array_size << endl;

}
template<class QueueElement>
ostream & operator<<(ostream & o, const dynamic_queue<QueueElement> &output_elements)
{
o << output_elements;
return o;
}

template<class QueueElement>
void dynamic_queue<QueueElement>::display(ostream &out) const
{
for (int i = ihead;i != itail;i = (i + 1) % array_capacity)
{
out << myarray[i] << " ";
cout << endl;
}
}

template<class QueueElement>

int dynamic_queue<QueueElement>::getSize() const
{
int count = 0;
for (int i = 0;i <= array_capacity;i++)
{
count++;
}
return count;
}

主要功能:

#include <iostream>
#include "DynamicCircularQueue.h"

using namespace std;

int main()
{
dynamic_queue<int> queue1(5);
queue1.enqueue(10);
queue1.enqueue(11);
queue1.getSize();
queue1.display(cout);


}

最佳答案

myarray = new QueueElement(initial_capacity);

应该是:

myarray = new QueueElement[initial_capacity];

由于 queue-element 是 int,您分配的是一个只有一个元素的数组,这就是您的代码在第二次调用 enqueue 时崩溃的原因。

关于c++ - 制作动态循环队列,元素输出正常但程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32939075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com