STL方面的问题,编译出现问题,大神给我看看,周一的要交啊

YUyuasun 2011-04-22 01:11:52
#include<iostream>
using namespace std;
#include<ctime>
#include<cstdlib>

#include<vector>
#include<list>
#include<iterator>
#include<algorithm>

const int SIZE=20; //the number of jobs
const int slice=3; //time slice of CPU
struct Job{
int process; //0 ,1 ,2consistent with index
int arrivalTime;
int cpuBurst;
bool done;
};

double FCFS(int *arrivalTime,int *cpuBurst);
double SJFNonpreemptive(Job* );
double RR(Job*);

//长短作业的比例分别取10%,20%........以10作为分界。时间长度小于10的为短作业
//时间长度大于10的为长作业。得到的平均周转时间存储在result[size]中
Job findShortestJob(vector<Job>& waiting )
{
Job min=waiting[0];
for(vector<Job>::iterator it=waiting.begin( );it!=waiting.end( );it++)
if( (*it).cpuBurst<min.cpuBurst)
min=(*it);

}


int main( ){

double resultFCFS[SIZE]; //store result
double resultSJF[SIZE];
double resultRR[SIZE];
double result_FCFS[SIZE];
double result_SJF[SIZE];
double result_RR[SIZE];

Job sequence[SIZE];

int arrivalTime[SIZE];
int cpuBurst[SIZE];
sequence[0].cpuBurst=arrivalTime[0]=0; //the first job's arrival time is at 0
int count=0;
int temp;
srand(0);

while(count<10){
int longJobs=(count+1)*2; //the number of long jobs

for(int i=0;i<SIZE;i++)
{
if(i>0)
sequence[i].arrivalTime=arrivalTime[i]=arrivalTime[i-1]+rand()%5;

if(longJobs>0)
{
sequence[i].cpuBurst=cpuBurst[i]=rand( )%20+10; //produce longtime job
longJobs--;
}
else
sequence[i].cpuBurst=cpuBurst[i]=rand( )%10; //produce short time job

sequence[i].done=false;

}
resultFCFS[count]=FCFS(arrivalTime,cpuBurst);
resultSJF[count]=SJFNonpreemptive(sequence);
resultRR[count]=RR(sequence);

//作业的不同到达顺序,上面的都是长作业先到,短作业后到,可以交换cpuBurst
//让短作业先到,长作业后到。 存储在result_中
for(int j=0;j<SIZE;j++)
{
if(cpuBurst[j]>=10)
{
temp=cpuBurst[j];
cpuBurst[j]=cpuBurst[SIZE-j-1];
cpuBurst[SIZE-j-1]=temp;

temp=sequence[j].cpuBurst;
sequence[j].cpuBurst=sequence[SIZE-j-1].cpuBurst;
sequence[SIZE-j-1].cpuBurst=temp;
}
}
result_FCFS[count]=FCFS(arrivalTime,cpuBurst);
result_SJF[count]=SJFNonpreemptive(sequence);
result_RR[count]=RR(sequence);


count++;

}
for(int k=0;k<SIZE;k++)
cout<<resultFCFS[k]<<" "<<result_FCFS[k]<<" "<<resultSJF[k]<<" "<<result_SJF[k]<<" "<<resultRR[k]<<" "<<result_RR[k]<<endl;

return 0;
}


//this function is to find shortest job


//function of FCFS,return turnaround time of FCFS
double FCFS(int *arrivalTime,int *cpuBurst)
{
int sum=0;
double turnTime=0; //turnaround time
for(int i=0;i<SIZE;i++)
{
sum+=cpuBurst[i];
turnTime=( turnTime*i+sum-arrivalTime[i] )/(i+1); //turn Time for i+1 jobs

}
return turnTime;
}

//function of SFJNonpreemptive ,returning turnaround time
//Job 0's arrival time is at 0

double SJFNonpreemptive(Job* sequence)
{

vector<Job> waiting; // jobs in waiting queue
vector<Job> list(sequence[1],sequence[SIZE-1]);//
int sum=0; //running time
int last=0;
int num=0; //number of jobs to be done
double turnTime=0.0;
Job current=sequence[0];

while(num<SIZE) //there are jobs left
{

for(vector<Job>::iterator it=list.begin( );it!=list.end( );it++)
if( (*it).arrivalTime<= sum && (*it).done==false)
waiting.push_back(*it); //add to waiting queue
sum++;
if(sum-last==current.cpuBurst) //current process is done,进入下一个作业
{
last=sum;
current.done=true;
num++;
turnTime=( turnTime*(num-1)+sum-current.arrivalTime )/(num);

if(waiting.size( )!=0)
current=findShortestJob(waiting ); //shortest job first
else //waiting queue is empty, 进入前一个作业的下个作业
{
if(current.process+1<SIZE)
{
current=list[current.process+1];
sum=current.arrivalTime;
last=sum;
}
}
}

//else继续下一秒

}
return turnTime;

}

//this function is Round Robin ,return turnaround time of RR
double RR(Job* sequence)
{
list<Job> queue; // jobs in queue
vector<Job> list(sequence[0],sequence[SIZE-1]);//
int sum=0; //running time
//int lastSum=0;
int num=0; //number of jobs to be done
double turnTime=0.0;
Job current=sequence[0];

while(num<SIZE)
{
for(vector<Job>::iterator it=list.begin( );it!=list.end( );it++)
if( (*it).arrivalTime<= sum && (*it).done==false)
queue.push_back(*it); //add to queue

if(current.cpuBurst >slice)
{
current.cpuBurst=current.cpuBurst-slice;
sum+=slice;
queue.pop_front( );
queue.push_back(current); //add to the end of the queue
current=queue.front( );
}
else
{
sum+=current.cpuBurst;
current.done=true; //当前任务完毕
num++;
turnTime=( turnTime*(num-1)+sum-current.arrivalTime )/num;
queue.pop_front( ); //delete the job

if(queue.size( )!=0) //the queue is not empty
current=queue.front( );

else
for(vector<Job>::iterator itt=list.begin( );itt!=list.end( );itt++)
if((*itt).done==false)
current=(*itt);

}

}
}


编译的结果是:
Error 1 error C2039: 'iterator_category' : is not a member of 'Job' f:\visual studio 2008\vc\include\xutility 764 操作系统仿真
Error 2 error C2146: syntax error : missing ';' before identifier 'iterator_category' f:\visual studio 2008\vc\include\xutility 764 操作系统仿真
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int f:\visual studio 2008\vc\include\xutility 764 操作系统仿真
Error 4 error C2602: 'std::iterator_traits<_Iter>::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>' f:\visual studio 2008\vc\include\xutility 764 操作系统仿真
Error 5 error C2868: 'std::iterator_traits<_Iter>::iterator_category' : illegal syntax for using-declaration; expected qualified-name f:\visual studio 2008\vc\include\xutility 764 操作系统仿真
Error 6 error C2039: 'value_type' : is not a member of 'Job' f:\visual studio 2008\vc\include\xutility 765 操作系统仿真
Error 7 error C2146: syntax error : missing ';' before identifier 'value_type' f:\visual studio 2008\vc\include\xutility 765 操作系统仿真
Error 8 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int f:\visual studio 2008\vc\include\xutility 765 操作系统仿真
Error 9 error C2602: 'std::iterator_traits<_Iter>::value_type' is not a member of a base class of 'std::iterator_traits<_Iter>' f:\visual studio 2008\vc\include\xutility 765 操作系统仿真
Error 10 error C2868: 'std::iterator_traits<_Iter>::value_type' : illegal syntax for using-declaration; expected qualified-name f:\visual studio 2008\vc\include\xutility 765 操作系统仿真
Error 11 error C2039: 'difference_type' : is not a member of 'Job' f:\visual studio 2008\vc\include\xutility 766 操作系统仿真
Error 12 error C2146: syntax error : missing ';' before identifier 'difference_type' f:\visual studio 2008\vc\include\xutility 766 操作系统仿真
Error 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int f:\visual studio 2008\vc\include\xutility 766 操作系统仿真
Error 14 error C2602: 'std::iterator_traits<_Iter>::difference_type' is not a member of a base class of 'std::iterator_traits<_Iter>' f:\visual studio 2008\vc\include\xutility 766 操作系统仿真
Error 15 error C2868: 'std::iterator_traits<_Iter>::difference_type' : illegal syntax for using-declaration; expected qualified-name f:\visual studio 2008\vc\include\xutility 766 操作系统仿真
Error 16 error C2039: 'pointer' : is not a member of 'Job' f:\visual studio 2008\vc\include\xutility 768 操作系统仿真
Error 17 error C2146: syntax error : missing ';' before identifier 'pointer' f:\visual studio 2008\vc\include\xutility 768 操作系统仿真
Error 18 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int f:\visual studio 2008\vc\include\xutility 768 操作系统仿真
Error 19 error C2602: 'std::iterator_traits<_Iter>::pointer' is not a member of a base class of 'std::iterator_traits<_Iter>' f:\visual studio 2008\vc\include\xutility 768 操作系统仿真
Error 20 error C2868: 'std::iterator_traits<_Iter>::pointer' : illegal syntax for using-declaration; expected qualified-name f:\visual studio 2008\vc\include\xutility 768 操作系统仿真
Error 21 error C2039: 'reference' : is not a member of 'Job' f:\visual studio 2008\vc\include\xutility 769 操作系统仿真
Error 22 error C2146: syntax error : missing ';' before identifier 'reference' f:\visual studio 2008\vc\include\xutility 769 操作系统仿真
Error 23 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int f:\visual studio 2008\vc\include\xutility 769 操作系统仿真
Error 24 error C2602: 'std::iterator_traits<_Iter>::reference' is not a member of a base class of 'std::iterator_traits<_Iter>' f:\visual studio 2008\vc\include\xutility 769 操作系统仿真
Error 25 error C2868: 'std::iterator_traits<_Iter>::reference' : illegal syntax for using-declaration; expected qualified-name f:\visual studio 2008\vc\include\xutility 769 操作系统仿真
Error 26 error C2664: 'void std::vector<_Ty>::_Construct<_Iter>(_Iter,_Iter,std::_Int_iterator_tag)' : cannot convert parameter 3 from 'int' to 'std::_Int_iterator_tag' f:\visual studio 2008\vc\include\vector 514 操作系统仿真

网上关于迭代器出现的问题好少,因此没有头绪
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YUyuasun 2011-04-22
  • 打赏
  • 举报
回复
谢谢你啊,我学的还是不扎实,呵呵。
pengzhixi 2011-04-22
  • 打赏
  • 举报
回复
double RR(Job* sequence)
{
list<Job> queue;
vector<Job> list(&sequence[0],&sequence[SIZE]);//修改的地方

double SJFNonpreemptive(Job* sequence)
{

vector<Job> waiting;
vector<Job> list(&sequence[0],&sequence[SIZE]);//修改的地方
晨星 2011-04-22
  • 打赏
  • 举报
回复
先试试把
using namespace std;
放到所有#include指令之后。

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧