Чтение данных в очередь - PullRequest
0 голосов
/ 18 февраля 2011

Используя следующий (неполный) код, я пытаюсь вставить 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

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Первый проход: Вы добавляете PL1, удаляете PL1, добавляете PL1.Теперь очередь содержит PL1.

Второй проход: вы добавляете PL2, удаляете PL1 (который находится впереди), добавляете PL1 (имя файла обновляется при удалении).Теперь очередь содержит PL2, PL1

Третий проход: вы добавляете PL3, удаляете PL2 (который находится впереди), добавляете PL2 (имя файла обновляется при удалении).Теперь очередь содержит PL1, PL3, PL2

и т. Д. ...

РЕДАКТИРОВАТЬ: первые 7 итераций

  • Добавить "PL1", Удалить / Распечатать«PL1», добавить «PL1» - очередь: «PL1»
  • Добавить «PL2», удалить / распечатать «PL1», добавить «PL1» - очередь: «PL2», «PL1»
  • Добавить "PL3", Удалить / Распечатать "PL2", Добавить "PL2" - Очередь: "PL1", "PL3", "PL2"
  • Добавить "PL4", Удалить / Распечатать "PL1",Добавить «PL1» - очередь: «PL3», «PL2», «PL4», «PL1»
  • Добавить «PL5», удалить / распечатать «PL3», добавить «PL3» - очередь: «PL2», "PL4", "PL1", "PL5", "PL3"
  • Добавить "PL6", удалить / распечатать "PL2", добавить "PL2" - очередь: "PL4", "PL1", "PL5 "," PL3 "," PL6 "," PL2 "
  • Добавить" PL7 ", удалить / распечатать" PL4 ", добавить" PL4 "- очередь:" PL1 "," PL5 "," PL3 ", "PL6", "PL2", "PL7", "PL4"
0 голосов
/ 18 февраля 2011

Поскольку вы не отметили это как домашнее задание, я предлагаю вам использовать std::queue.

Он был проверен (тысячи раз), работает, вам не нужно его писать, просто используйте его.

См .: http://www.cplusplus.com/reference/stl/queue/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...