类函数不会永久改变成员变量

空指针

我正在尝试在 C++ 中实现 FCFS先进先出 (FIFO),也称为先到先服务 (FCFS)算法。

#include<bits/stdc++.h>

using namespace std;

class Process{
public:
  static int count;
  static int cycle_count;
  int id;
  int at;
  int wt;
  int tat;
  int bt;

  Process(){
    id = count++;
  }

  void compute(){
    if (cycle_count < at){
      cycle_count = at;
    }
    cycle_count += bt;
    tat = cycle_count;
    wt = tat - bt;
  }

};

float average_wt(int n, vector<Process> v){
  float avg = 0;
  for (Process i: v){
    avg += i.wt;
  }
  avg /= n;
  return avg;
}

float average_tat(int n, vector<Process> v){
  float avg = 0;
  for (int i = 0; i < n; ++i){
    avg += v[i].tat;
  }
  avg /= n;
  return avg;
}

void print(int n, vector<Process> v){
  cout << "Process\tBurst Time\tArrival Time\tWaiting Time\tTurnaround Time" << endl;
  cout << "-------\t----------\t------------\t------------\t---------------" << endl;
  for(Process i: v){
    i.compute();
    cout << i.id << "\t\t\t" << i.bt << "\t\t\t" << i.at << "\t\t\t\t" << i.wt << "\t\t\t\t" << i.tat << endl;
  }
  cout << "Average Waiting Time: " << average_wt(n, v) << endl;
  cout << "Average Turnaround Time: " << average_tat(n, v) << endl;
  cout << endl;
}


bool sort_on_at(Process a, Process b){
  return a.at < b.at;
}

int Process::count = 0;
int Process::cycle_count = 0;

int main(int argc, char const *argv[]) {


  int n;
  cout << "Enter the number of processes: ";
  cin >> n;
  vector<Process> process(n);
  for(int i = 0; i < n; ++i){
    cout << "Process " << i << ":" << endl;
    cout << "\tArrival Time: ";
    cin >> process[i].at;
    cout << "\tBurst Time: ";
    cin >> process[i].bt;
  }

  sort(process.begin(), process.end(), sort_on_at);
  print(n, process);

  return 0;
}

问题是此代码正确打印了各个进程的等待和周转时间,但将平均等待和周转时间设为0.

预期输出:

Enter the number of processes: 3
Process 0:
    Arrival Time: 0
    Burst Time: 24
Process 1:
    Arrival Time: 0
    Burst Time: 3
Process 2:
    Arrival Time: 0
    Burst Time: 3
Process Burst Time  Arrival Time    Waiting Time    Turnaround Time
------- ----------  ------------    ------------    ---------------
0           24          0               0               24
1           3           0               24              27
2           3           0               27              30
Average Waiting Time: 17
Average Turnaround Time: 27

实际输出:

Enter the number of processes: 3
Process 0:
    Arrival Time: 0
    Burst Time: 24
Process 1:
    Arrival Time: 0
    Burst Time: 3
Process 2:
    Arrival Time: 0
    Burst Time: 3
Process Burst Time  Arrival Time    Waiting Time    Turnaround Time
------- ----------  ------------    ------------    ---------------
0           24          0               0               24
1           3           0               24              27
2           3           0               27              30
Average Waiting Time: 0
Average Turnaround Time: 0

我曾尝试一些调试,发现该compute()功能确实改变了值,(因为它打印正确的值的各个过程),但由于某些原因,wttat0在所有进程average_tat()average_wt()

如果我能说得更清楚,请告诉我。

rafix07

wtcompute方法中计算,但这对 的副本进行操作Process

for(Process i: v){  // a copy is made
  i.compute();

您需要使用值引用(&i在这种情况下)来处理Process存储在向量中的原始文件,然后wt将被保存。

for(Process& i: v){
  i.compute();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类中的const函数可以改变成员值吗?

来自分类Dev

从成员函数内部永久更改类变量的方法是什么?

来自分类Dev

引导程序和搜索输入的宽度改变成焦点

来自分类Dev

反应在窗口大小调整DOM改变成分

来自分类Dev

检测并替换不成对的降价符号,不改变成对的符号

来自分类Dev

在类成员函数中声明类成员变量

来自分类Dev

为什么成员函数中的char数组类型的类成员突然变成const char数组类型?

来自分类Dev

构造函数中的 defaultparameter 神奇地变成了类变量

来自分类Dev

在函数内部定义类的成员变量

来自分类Dev

类函数不更改成员变量

来自分类Dev

调用自己的函数时,类中的枚举不会改变

来自分类Dev

在函数中传递$ scope变量不会改变

来自分类Dev

entry.get()函数不会更改变量的值

来自分类Dev

访问作为父类成员变量的对象的成员函数

来自分类Dev

根据单独的模板化成员来改变类的模板化成员函数的返回类型

来自分类Dev

根据单独的模板化成员来改变类的模板化成员函数的返回类型

来自分类Dev

使用类变量作为类成员函数的默认参数

来自分类Dev

变量不会随着if语句而改变

来自分类Dev

班级成员在分配时不会改变

来自分类Dev

复制具有指针作为成员变量的类的构造函数

来自分类Dev

如何将函数存储为类成员变量

来自分类Dev

使用局部变量在函数内设置类成员

来自分类Dev

变量,用于类模板的成员函数的参数个数

来自分类Dev

使用类成员函数/变量初始化默认参数

来自分类Dev

在其成员函数中使用类的私有变量

来自分类Dev

无法访问成员函数中的类变量

来自分类Dev

如何比类中的成员变量更早地调用构造函数?

来自分类Dev

使用类成员函数初始化变量

来自分类Dev

函数的输出不会改变

Related 相关文章

  1. 1

    类中的const函数可以改变成员值吗?

  2. 2

    从成员函数内部永久更改类变量的方法是什么?

  3. 3

    引导程序和搜索输入的宽度改变成焦点

  4. 4

    反应在窗口大小调整DOM改变成分

  5. 5

    检测并替换不成对的降价符号,不改变成对的符号

  6. 6

    在类成员函数中声明类成员变量

  7. 7

    为什么成员函数中的char数组类型的类成员突然变成const char数组类型?

  8. 8

    构造函数中的 defaultparameter 神奇地变成了类变量

  9. 9

    在函数内部定义类的成员变量

  10. 10

    类函数不更改成员变量

  11. 11

    调用自己的函数时,类中的枚举不会改变

  12. 12

    在函数中传递$ scope变量不会改变

  13. 13

    entry.get()函数不会更改变量的值

  14. 14

    访问作为父类成员变量的对象的成员函数

  15. 15

    根据单独的模板化成员来改变类的模板化成员函数的返回类型

  16. 16

    根据单独的模板化成员来改变类的模板化成员函数的返回类型

  17. 17

    使用类变量作为类成员函数的默认参数

  18. 18

    变量不会随着if语句而改变

  19. 19

    班级成员在分配时不会改变

  20. 20

    复制具有指针作为成员变量的类的构造函数

  21. 21

    如何将函数存储为类成员变量

  22. 22

    使用局部变量在函数内设置类成员

  23. 23

    变量,用于类模板的成员函数的参数个数

  24. 24

    使用类成员函数/变量初始化默认参数

  25. 25

    在其成员函数中使用类的私有变量

  26. 26

    无法访问成员函数中的类变量

  27. 27

    如何比类中的成员变量更早地调用构造函数?

  28. 28

    使用类成员函数初始化变量

  29. 29

    函数的输出不会改变

热门标签

归档