我遇到了用c ++设置的队列的问题。我已经设置了代码,大部分代码都正常工作。但出于某种原因,当我从我的数组中删除一个元素并尝试显示它时,我只在中间显示了一个数组元素(数组的大小只有3)。当我添加另一个,它工作正常,但在那之后,如果我尝试删除元素或添加,没有任何显示,以显示任何被删除或添加。 任何人都可以帮助我得到它应该如何?我添加了代码,以便您可以看到我如何设置它。
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
const int MAX = 3;
class Queue
{
private:
char ship;
string arr[MAX];
int head;
int tail;
public:
Queue()
{
head = 0;
tail = 0;
}
void Add(string ship)
{
arr[tail++] = ship;
}
void Remove()
{
cout << endl;
cout << "Ship ID: " << arr[head] << " has been removed from the queue!"
<< endl;
arr->erase(head);
//head++;
tail--;
}
void display()
{
for (int i = head; i < tail; i++)
{
cout << arr[i] << endl;
}
}
bool IsEmpty()
{
if (tail-head == 0)
{
return true;
}
else
{
return false;
}
}
bool IsFull()
{
if (tail-head == MAX)
{
return true;
}
else
{
return false;
}
}
};
int main()
{
Queue q;
string ship;
q.Add(ship = "K349, 42, 8");
q.Add(ship = "K653, 22, 6");
q.Add(ship = "D994, 60, 10");
if (q.IsEmpty())
{
cout << "Queue is empty!" << endl;
}
else
{
cout << "Queue is not empty!" << endl;
}
cout << endl;
q.display();
q.Remove();
q.display();
system("pause");
q.Add(ship = "F777, 26, 7");
q.display();
q.Remove();
q.Remove();
q.Remove();
if (q.IsEmpty())
{
cout << "Queue is empty!" << endl;
}
else
{
cout << "Queue is not empty!" << endl;
}
system("pause");
return 0;
}