我有一个结构矢量,结构看起来像这样:
struct myData{
int ID;
int arrivalTime;
int burstTime;
};
使用此数据填充载体后:
1 5 16
4 7 12
3 12 4
2 7 8
其中每一行是一个单独的结构ID(任意,不表示到达顺序),arrivalTime和burstTime,我如何使用“for”或“while”循环来逐步执行向量索引并计算数据我可以打印出这样的东西吗?
Time 0 Processor is Idle
Time 5 Process 1 starts running
Time 21 Process 2 is running
Time 29 Process 4 is running
Time 41 Process 3 is running
我认为我可以这样做的方法是让一个整数跟踪当前时间是什么(当前时间是已经运行的进程的突发时间的总和)但我似乎无法弄清楚考虑空闲时间的算法(当处理器没有做任何事情而新任务尚未到达时)以及跟踪其他数字。为简单起见,我只是决定当两个进程同时到达时,我将处理具有较低ID号的进程。我知道我没有在这里放太多代码来证明我正在尝试做什么,但我希望我已经相当清楚地解释了它。我正在寻找这个问题的伪代码算法解决方案,但我不会对已经编码的东西说不(在C ++中?)。
作为补充说明,如果我无法清楚地说明我如何清楚地访问我的数据,那么:
cout << structVector[0].ID << "\n";
cout << structVector[0].arrivalTime << "\n";
cout << structVector[0].burstTime << "\n";
会打印出来
1
5
16
任何psuedo代码或实际代码的帮助都将非常感激!!!在阅读了几篇这篇文章之后,我意识到我对这个问题非常了解,但我希望能帮助你理解如何计算这些数据。
答案 0 :(得分:1)
首先,根据到达时间对矢量进行排序。 然后,以下代码将完成您要查找的内容。
int i = 0, time = 0;
while (i < vec.size())
{
if (vec[i]. arrivalTime > time)
cout << "Time " << time << "process is idle";
time += vec[i].arrivalTime;
cout << "Time " << time << " Process " << vec[i].ID << " is running" << endl;
time += vec[i].burstTime;
i++;
}