我正在为我的操作系统课程分配工作。我将模拟调度程序如何与进程一起使用。我有一个Process类,它包含有关进程的所有信息。我还有一个名为scheduler的类,它包含两个进程列表,交互式和实时。
使用测试文本文件,我能够读取文件并将进程放入两个列表中。一个用于交互式进程,一个用于实时进程。
我的问题是这个。我的教授没有让我们知道他是否会按照FCFS的顺序进行处理,因为他说他们必须按照这个顺序执行。所以,我现在必须做的是遍历列表并根据到达时间对进程进行排序。如何遍历列表?
我尝试过使用
list<Process>::iterator it;
for (it=super.interactive.begin() ; it !=super.interactive.end(); it++)
其中super
是我正在使用的Scheduler对象的名称,interactive
是交互式进程列表。
但问题是,由于它是一个由进程组成的列表,我无法访问告诉我进程何时开始的int starttime
,因为我不知道如何访问这些进程中的单个进程列表。
我非常感谢任何帮助,或者我可以用于此任务的任何其他容器的建议。
我首先让它设置为使用队列,但是当需要迭代它时,我被告知我不能。这就是为什么我切换到链接,但我不太熟悉那些。
我唯一的另一个想法是只使用动态数组,但由于push_back()
函数能够使用列表会很好。我不必担心增加阵列容量,因为有了列表和队列,你可以添加到后面。
答案 0 :(得分:2)
iterators的一个品质就是它们就像你正在迭代的数据的指针一样,所以如果你想要starttime
(它是公开的),你可以在里面做it->starttime
你的循环。
但首先,你可能不想要std :: list。请改用std::vector,其行为类似于“动态数组”,但在内部处理所有内存分配。随机访问将有助于保持排序列表。
接下来,您需要一种排序方式。幸运的是,标准库有std::sort。您需要重载operator<
或提供BinaryPredicate(如链接中所述)。
答案 1 :(得分:0)
但问题是,由于它是一个由进程组成的列表,我无法访问int starttime,它告诉我进程何时启动,因为我不知道如何访问这些列表中的各个进程。 / p>
为此,您可以执行:(*it).something()
或更好看:it->something()
。
答案 2 :(得分:0)
我问的唯一原因是因为我需要对一堆我的Process类进行排序。事实证明,我班上的其他人都假设教授会将输入文本格式化为先到先得,所以我不必担心。谢谢你的帮助。它确实有助于找出任务的其他部分:D