C++初学者,从网上摘了个程序 有点看不懂,求大神解释一下 谢谢

#include<iostream>#include<cstdlib>#include<queue>usingnamespacestd;boolexistOrNot(in... #include <iostream>
#include <cstdlib>
#include <queue>
using namespace std;
bool existOrNot(int num, queue <int> myQueue)
{
while (!myQueue.empty())
{
if (myQueue.front()==num)
return true;
else myQueue.pop();
}
return false;
}
int main()
{
queue <int> memQueue;
int times=12;
int tmpValue;
int page[ ]={4,3,2,1,4,3,5,4,3,2,1,5};
for (int i=0; i<12; i++)
{
if (memQueue.size()<3)
memQueue.push(page[i]);
else
{
if (existOrNot(page[i],memQueue))
{
times--;
}
else {
memQueue.pop();
memQueue.push(page[i]);
}
}
int size=memQueue.size();
while (size>0)
{

tmpValue=memQueue.front();
cout<<memQueue.front()<<" ";
memQueue.pop();
memQueue.push(tmpValue);
size--;
}
cout<<endl;
}
cout<<"使用FIFO策略时,共发生缺页中断"<<times<<"次. "<<endl;
return 0;
}
int size=memQueue.size(); 之后各句的作用及意义,还有当i=8时的输出,怎么我认为是 3 5 3啊,求解释! 谢谢
展开
 我来答
phycho_pc
2012-01-11
知道答主
回答量:17
采纳率:0%
帮助的人:7.6万
展开全部
这应该是操作系统的先进先出的物宽页面转换算法。原理是如果内存中页面队列为空则把页面放进出,直到内存页面队列满(这里的程序内存页面最大数为3),如果内存中的页面队列满了,则要判断要调入的页面是否已经在内存页面中,不在的话就要进行页面置换。
#include <iostream>
#include <cstdlib>
#include <queue>
using namespace std;
bool existOrNot(int num, queue <int> myQueue) //判断要调入的页面是否已经在内存页面中
{
while (!myQueue.empty()) //队列不为空
{
if (myQueue.front()==num) //如果要访问的页面是队列中的第一个页面
return true;
else myQueue.pop(); //否则第一个出队列,循环判断,直到队列空如果要访问的页面存在队列中,则返回TRUE,否则返回FALSE
}
return false;
}
int main()
{
queue <int> memQueue;
int times=12;
int tmpValue;
int page[ ]={4,3,2,1,4,3,5,4,3,2,1,5};
for (int i=0; i<12; i++)
{
if (memQueue.size()<3)
memQueue.push(page[i]); //当内存队列没满,直接调入页面i
else
{
if (existOrNot(page[i],memQueue))
{
times--;
}
else {
memQueue.pop();
memQueue.push(page[i]);
}
}
int size=memQueue.size();
while (size>0) //这里的循环是为了输出当前内存中的页面
{

tmpValue=memQueue.front(); //先提取第一个页面
cout<<memQueue.front()<<" ";//输出
memQueue.pop(); //第一个页面出列,
memQueue.push(tmpValue);//页面插入到列尾,三次过后,队列会还原,并没有改变内存中的页面,并对其中的页面输出了一遍
size--;
}
cout<<endl;
}
cout<<"使用FIFO策略时,共发生缺页中断"<<times<<"次. "<<endl;
return 0;
}
page[ ]={4,3,2,1,4,3,5,4,3,2,1,5};
执行过程应该是这样的:
页面4,3,罩没亮2直接调入内存,
1不在内存,4出,1进,结果为3,2,1;第1次置换
4不在内存,3出,4进;结果为察散2,1,4;第2次置换
3不在内存,2出,3进;结果为1,4,3;第3次置换
5不在内存,1出,5进;结果为4,3,5;第4次置换
4在内存
3在内存,这时候i=8,故当i=8时的输出应该是4,3,5
2不在内存,4出,2进;结果为3,5,2;第5次置换
1不在内存,3出,1进;结果为5,2,1;第6次置换
5在内存,
共进行了6次置换。
PS:楼主太抠了,也不奖赏一点。。。
q11579
2012-01-11
知道答主
回答量:7
采纳率:0%
帮助的人:1.2万
展开全部
华蔽慧敬夏联盟,会电脑2大语言的碧胡可以加入(也就是C/C++和JAVA)
关于你提出的问题解释:函数是可以变化的,你的脑筋也要变宏慎化啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式