Используя следующий (неполный) код, я пытаюсь вставить 10 строк в очередь строк (объявленную и определенную ниже), а затем считывать содержимое по одной за раз, однако выходные данные из очереди не соответствуют ожидаемый выход
int main()
{
ifstream File;
for (int count = 1; count <= 10; count ++)
{
string filename;
stringstream ss;
ss << "PersonLists/PL" << count << ".txt";
filename = ss.str();
WaitingListList.Add(filename);
WaitingListList.Remove(filename);
cout << filename << endl;
WaitingListList.Add(filename);
}
}
Вот что я ожидал от своего кода, и я убедился, что объекты filename
создаются правильно, используя stringstream
, видимый в int main()
, вставляя выходной поток непосредственно после строки filename = ss.str()
.
PersonLists/PL1.txt
PersonLists/PL2.txt
PersonLists/PL3.txt
PersonLists/PL4.txt
PersonLists/PL5.txt
PersonLists/PL6.txt
PersonLists/PL7.txt
PersonLists/PL8.txt
PersonLists/PL9.txt
PersonLists/PL10.txt
Однако, когда я печатаю содержимое очереди, это вывод, который я получаю, и я не могу различить какой-либо шаблон в именах файлов, который мог бы указать причину этого. Может кто-нибудь, взглянув на код здесь, понять, что происходит? Я успешно использовал этот же процесс в других частях моей программы, используя тот же шаблон очереди.
PersonLists/PL1.txt
PersonLists/PL1.txt
PersonLists/PL2.txt
PersonLists/PL1.txt
PersonLists/PL3.txt
PersonLists/PL2.txt
PersonLists/PL4.txt
PersonLists/PL1.txt
PersonLists/PL5.txt
PersonLists/PL3.txt
queue.h
#ifndef QUEUE_H
#define QUEUE_H
using namespace std;
template <class Type>
class queue
{
private:
Type *Contents;
int Front, Back;
int QueueSize;
public:
queue(int queuesize = 10);
~queue();
bool Empty() const;
bool Full() const;
bool Remove(Type&);
bool Add(Type&);
};
#endif
queuetemplate.h
#ifndef QUEUETEMPLATE_H
#define QUEUETEMPLATE_H
#include "queue.h"
using namespace std;
// Constructor
template <class Type>
queue<Type> :: queue(int queuesize):
Front(0), Back(0),
QueueSize(queuesize),
Contents(new Type[queuesize + 1])
{}
// Destructor
template <class Type>
queue<Type> :: ~queue()
{
delete[] Contents;
}
// Tests
template <class Type>
bool queue<Type> :: Empty() const
{
return (Front == Back) ? true : false;
}
template <class Type>
bool queue<Type> :: Full() const
{
return ((1 + Back) % (QueueSize + 1) == Front) ? true : false;
}
// Push and pop
template <class Type>
bool queue<Type> :: Remove(Type& FrontElement)
{
if (Empty())
{
return false;
}
else
{
FrontElement = Contents[Front];
Front = (Front + 1) % (QueueSize + 1);
return true;
}
}
template <class Type>
bool queue<Type> :: Add(Type& NewElement)
{
if(Full())
{
return false;
}
else
{
Contents[Back] = NewElement;
Back = (Back + 1) % (QueueSize + 1);
return true;
}
}
#endif