gpt4 book ai didi

c++ - 将数据读入队列

转载 作者:行者123 更新时间:2023-11-28 01:08:12 25 4
gpt4 key购买 nike

使用以下(不完整的)代码,我试图将 10 个字符串插入字符串队列(进一步声明和定义),然后一次读取一个内容,但是队列 doe snot 的输出对应于预期输出

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 对象正在使用 int main 中看到的 stringstream 正确构造() 通过在 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

队列.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

队列模板.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

最佳答案

第一步:添加 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”

关于c++ - 将数据读入队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044817/

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