You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Vector新手求助:如何向waiting向量插入值并计算等待时间

问题分析与修正代码

你的代码存在三个核心问题:

  • 索引越界:当i=0时,waiting[i-1]等价于waiting[-1],这是非法的数组访问(waiting初始为空,且C++向量不允许负索引)。
  • 公式逻辑错误:FCFS调度中,第i个进程的等待时间应该是前一个进程的等待时间加上前一个进程的执行时间(即burst[i-1]),而非当前进程的burst[i]。
  • 未初始化首个元素:第一个进程的等待时间通常为0(若不考虑到达时间差),需要先初始化这个值再进行后续累加。

修正后的基础代码

int value;
int size;
vector<int>process;
vector<int>burst;
vector<int>arrival;
vector<int>waiting;
vector<int>turnaround;
vector<int>completion;

void fcfs()
{
    cout << "Enter the no. of processes: "; cin >> size;
    cout << "Enter the Arrival Time of each Processes: "; 
    
    for (int i = 0; i < size; i++)
    {
        cin >> value;
        arrival.push_back(value);
    }
    cout << "Enter the Burst Time of each Processes: ";

    for (int i = 0; i < size; i++)
    {
        cin >> value;
        burst.push_back(value);
    }

    // 修正等待时间计算逻辑
    if (size > 0) {
        // 第一个进程等待时间初始为0(不考虑到达时间差的场景)
        waiting.push_back(0);
        for (int i = 1; i < size; i++)
        {
            // 正确公式:当前等待时间 = 前一个等待时间 + 前一个进程的执行时间
            waiting.push_back(waiting[i-1] + burst[i-1]);
        }
    }
}

考虑到达时间的进阶修正

如果进程并非同时到达,需要结合到达时间计算等待时间,代码调整如下:

// 替换原等待时间计算部分
if (size > 0) {
    // 第一个进程的完成时间 = 到达时间 + 执行时间
    completion.push_back(arrival[0] + burst[0]);
    // 第一个进程等待时间为0(无前置进程)
    waiting.push_back(0);
    
    for (int i = 1; i < size; i++)
    {
        // 当前进程等待时间 = 前一个进程完成时间 - 当前进程到达时间,若为负则取0(进程还未到达)
        int wait_time = max(0, completion[i-1] - arrival[i]);
        waiting.push_back(wait_time);
        // 当前进程完成时间 = 前一个完成时间 + 当前执行时间
        completion.push_back(completion[i-1] + burst[i]);
    }
}

内容的提问来源于stack exchange,提问作者Reginald Barrows

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:40:35