迭代由自定义类组成的列表。我该怎么做? C ++

时间:2011-03-24 23:09:21

标签: c++ class list iteration

我正在为我的操作系统课程分配工作。我将模拟调度程序如何与进程一起使用。我有一个Process类,它包含有关进程的所有信息。我还有一个名为scheduler的类,它包含两个进程列表,交互式和实时。

使用测试文本文件,我能够读取文件并将进程放入两个列表中。一个用于交互式进程,一个用于实时进程。

我的问题是这个。我的教授没有让我们知道他是否会按照FCFS的顺序进行处理,因为他说他们必须按照这个顺序执行。所以,我现在必须做的是遍历列表并根据到达时间对进程进行排序。如何遍历列表?

我尝试过使用

list<Process>::iterator it;
for (it=super.interactive.begin() ; it !=super.interactive.end(); it++)

其中super是我正在使用的Scheduler对象的名称,interactive是交互式进程列表。

但问题是,由于它是一个由进程组成的列表,我无法访问告诉我进程何时开始的int starttime,因为我不知道如何访问这些进程中的单个进程列表。

我非常感谢任何帮助,或者我可以用于此任务的任何其他容器的建议。

我首先让它设置为使用队列,但是当需要迭代它时,我被告知我不能。这就是为什么我切换到链接,但我不太熟悉那些。

我唯一的另一个想法是只使用动态数组,但由于push_back()函数能够使用列表会很好。我不必担心增加阵列容量,因为有了列表和队列,你可以添加到后面。

3 个答案:

答案 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