使用以下(不完整的)代码,我试图将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


队列

#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


队列模板

#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

最佳答案

第一遍:添加PL1,删除PL1,添加PL1。队列现在包含PL1。

第二遍:添加PL2,删除PL1(位于前面),添加PL1(文件名由remove更新)。队列现在包含PL2,PL1

第三遍:添加PL3,删除PL2(位于前面),添加PL2(文件名由remove更新)。队列现在包含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”

10-08 20:04