构造函数的问题,短作业优先调度算法

作者: 新金沙平台  发布:2019-09-22

短作业优先调治原理

短作业优先调整算法是指对短作业优先调节的算法。短作业优先的调节算法是从后备队列中选择贰个或若干个估摸运转时刻最短的作业,将它们调入内存运维。

算法流程图

图片 1

JCB 代表叁个学业,JCB 的构造如下:

图片 2

模仿完成

在荧屏上输出以下作业状态表:

图片 3

可以透过键盘命令动态地追加课业(即扩张二个JCB 数 据结构项)。增添课业后,作业状态表内容可更新查看。

算法代码:

#include "stdafx.h"#include<iostream>#include <iomanip>#include<queue>#include<math.h>#include<vector>#include<algorithm>using namespace std;/*作业的数据结构*/struct JCB{    int ID;//作业ID    double in_time;//作业进入时间    double ex_time;//作业执行时间};/*执行时间大到下排序*/bool cmp(pair<JCB, double> first, pair<JCB, double> next){    return first.second > next.second;}/*ID从小到大排序*/bool cmp2(pair<JCB, double> first, pair<JCB, double> next){    return first.first.ID < next.first.ID;}/*开始执行时间从早到晚排序*/bool cmp3(pair<JCB, double> first, pair<JCB, double> next){    return first.second < next.second;}/*ID从大到小排序*/bool cmp4(pair<JCB, double> first, pair<JCB, double> next){    return first.first.ID > next.first.ID;}/*显示作业表格*/void ShowJobChart(vector<pair<JCB, double>>res){    cout<<left;    cout << "--------------------------------作业状态表-------------------------------------"<<endl;    cout << setw(10) << "作业ID" << "|"<< setw(10) << "到达时间" << "|" << setw(10) << "执行时间"<<"|" << setw(10) << "开始时间" << "|" <<        setw(10) << "完成时间" << "|" << setw(10) << "周转时间" << "|" << setw(12) << "带权周转时间" <<"|"<< endl;    cout << "-------------------------------------------------------------------------------" << endl;    for (auto it = res.begin();it != res.end();it  )    {        cout << setw(10) << it->first.ID << "|" << setw(10) <<it->first.in_time<<"|" << setw(10) << it->first.ex_time << "|" << setw(10) <<it->second<<"|"            << setw(10) <<it->second it->first.ex_time<<"|" << setw(10) <<            it->second   it->first.ex_time -it->first.in_time<< "|"<< setw(12)<< (it->second   it->first.ex_time - it->first.in_time)/it->first.ex_time<<"|"<<endl;    }    cout << "-------------------------------------------------------------------------------" << endl;}/*作业调度                                       *//*输入:待调度的作业队列jobs                     *//*输出:调度好的作业数组res                         */vector<pair<JCB, double>> JobScheduling(queue<JCB>jobs){    JCB f_job = jobs.front();    jobs.pop();    //res数组用于存调度之后的结果,jcb以及对应的作业开始执行时间    vector<pair<JCB, double>>res;    //首先将第一个到达的工作直接加入数组    res.push_back(make_pair(f_job, f_job.in_time));    vector<pair<JCB, double>>job;    double finish = f_job.in_time   f_job.ex_time;    while (!jobs.empty    {        //将到达时间在上一个执行的工作结束时间之前的作业存入job数组        while (jobs.front().in_time <= finish)        {            job.push_back(make_pair(jobs.front(), jobs.front().ex_time));            jobs.pop();            if (jobs.emptybreak;        }        //如果没有到达时间在上一个执行的工作结束时间之前的作业        if (job.empty        {            res.push_back(make_pair(jobs.front(), jobs.front().in_time));            finish = jobs.front().in_time   jobs.front().ex_time;            jobs.pop();            continue;        }        //将到达时间在上一个执行的工作结束时间之前的作业按执行时间从大到小排序        sort(job.begin(), job.end;        //将最短执行时间的工作存进结果数组        res.push_back(make_pair(job.rbegin()->first, finish));        //更新结束时间        finish  = job.rbegin()->second;        job.pop_back();    }    //如果后面几个进入的作业都在上一个执行的作业结束之前进入        while(!job.empty        {            res.push_back(make_pair(job.rbegin()->first, finish));            finish  = job.rbegin()->second;            job.pop_back();        }        sort(res.begin(), res.end;        return res;    }/*添加作业                                        *//*输入:待添加的作业job,以及调度好的作业数组res*//*输出:添加作业之后的作业数组res               */vector<pair<JCB, double>> Addjob(JCB job,vector<pair<JCB, double>>res){    double tmp=job.in_time;    vector<pair<JCB, double>>t_job;    vector<pair<JCB, double>>res2;    sort(res.begin(), res.end;    if (job.in_time > res.rbegin()->second)//如果作业的进入时间比最后执行作业的执行时间还晚    {        res.push_back(make_pair(job, job.in_time));        return res;    }    //将作业的执行时间从早到晚排序,将执行时间晚于作业进入时间的作业加入数组并    //确定第一个执行的作业之后,重新调用作业调度函数    queue<JCB>jobs;    for (auto it = res.begin();it != res.end();it  )    {        //比较待添加的作业的进入时间和已经调度好的作业的开始执行时间        //和待添加的作业的执行时间和已经调度好的作业的执行时间        if (job.in_time > it->second||job.ex_time>=it->first.ex_time)continue;        else        {            job.in_time = it->second;            jobs.push;            sort(it, res.end;            for (auto it2 = res.end() - 1;it2 > it;)            {                jobs.push(it2->first);                it2--;                res.pop_back();            }            jobs.push(it->first);            it--;            res.pop_back();            break;        }    }    //重新调用作业调度函数    res2=JobScheduling;    res2.begin()->first.in_time = tmp;    //将重新调度好的作业与不参与调度的作业连接    res.insert, res2.begin(), res2.end;    sort(res.begin(), res.end;    return res;}int main(){    queue<JCB>jobs;    JCB job1, job2, job3, job4,job5;    //初始作业队列    job1 = { 1,8.00,2 };    jobs.push;    job2 = { 2,8.50,0.50 };    jobs.push;    job3 = { 3,9.00,0.10 };    jobs.push;    job4 = { 4,11.60,0.20 };    jobs.push;    //调用作业调度函数    vector<pair<JCB, double>> res=JobScheduling;    //输出作业状态表    ShowJobChart;    char i ;    cout << "添加作业?:";    cin >> i;    while (i-'y'==0)    {        JCB job;        cout << "请输入作业ID:";        cin >> job.ID;        cout << "请输入作业进入时间:";        cin >> job.in_time;        cout << "请输入作业执行时间:";        cin >> job.ex_time;        //添加作业        vector<pair<JCB, double>> res = Addjob(job, JobScheduling;        ShowJobChart;        cout << "继续添加作业?:";        cin >> i;    }}

拷贝调控 构造函数的标题

FileManager最新版已升任到9.x,9.x激增了对文本的批量甩卖,但依然有部分同学在继续使用6.x,这里大伯整理了一份和睦在安排6.x时,蒙受的主题材料和解决方案。

运作结果截图

编写翻译程序

图片 4

运作程序

图片 5

累加三个学业

图片 6

三翻五次增加二个学业

图片 7

编写翻译意况:Ubuntu

难点1:上面①处的代码注释掉后,就编写翻译可是,为何???

图片 8

主题素材2:然而把②处的也诠释掉后,编译就过了,为啥???

编译错误:

001.cpp: In copy constructor ‘test::test(const test&)’:001.cpp:21:22: error: no matching function for call to ‘Int::Int()’   test(const test& t){                      ^001.cpp:11:3: note: candidate: Int::Int(const Int&)   Int(const Int& tmp){   ^~~001.cpp:11:3: note:   candidate expects 1 argument, 0 provided001.cpp:8:3: note: candidate: Int::Int   Int:mi{   ^~~001.cpp:8:3: note:   candidate expects 1 argument, 0 provided

#include <iostream>class Int{private:  int mi;public:  //Int(){}---->①  Int:mi{//---->④    std::cout << "c" << std::endl;  }  Int(const Int& tmp){    mi = tmp.mi;  }  ~Int(){}};class test{  Int data;//---->③public:  test : data{}  test(const test& t){//---->②    //data = t.data;//---->②  }//---->②  ~test(){}  Int getvalue(){    return data;  }  //重载方法  Int getvalue() const {    return data;  }};int main(){  //Int d1;  //test t1;  //const test t2;    //Int a1 = t2.getvalue();  //int& b1 = t2.getvalue();  //const Int& c1 = t2.getvalue();}

安装

下载安装包解压后,在根目录下会找到三个公文夹:langsplugins,分别将四个文本夹拷至TinyMCE的言语目录下和插件目录下,假设有覆盖争执,提议将原始文件夹复制一份

主题素材1的答案:class test里有个自定义成员data,由于class Int,提供了有参数的构造函数,导致了编写翻译器就不会自动生成暗许构造函数,並且在class test里也从没给data赋开端值,未有给起先值,当编写翻译到test的正片构造函数时,发掘data未有伊始值,所以编写翻译器就去找Int的暗中认可的构造函数,然则没找到,所以就提醒找不到‘Int::Int()’。

配置

FileManager 6.x 的Bug比较多,五叔协作Chrome的调养工具,才将错误一一找寻来,并勘误。
9.x 是多少个簇新的本子,勘误了4.x-6.x全数的一无可取,假使不情愿修改错误的同学能够思量转向9.x

本文由新金沙平台发布于新金沙平台,转载请注明出处:构造函数的问题,短作业优先调度算法

关键词: 新金沙平台