题目简单描述:对于一个大小为max_cache_size的缓存,有请求页面page_request,大小为len。
当缓存没满时,在缓存中查看是否有请求的页面,如果没有,则将页面加入缓存,失败值+1;
当缓存已满,在缓存中查看是否有请求的页面,如果没有,则将最先加入缓存页面清除,然后将新页面加入缓存,失败值加一。
#include <iostream>
using namespace std;
int countCacheMiss(int max_cache_size, int *page_requests, int len)
{
// WRITE YOUR CODE HERE
int count = 0;//请求失败值
int *cache = new int[max_cache_size];
for (int i=0;i<max_cache_size;i++)
cache[i] = -1;//缓存初始值都为-1
cache[0] = page_requests[0];//第一个直接进
count++;
bool flag = false;//缓存中是否有该请求页
int i;//记录page_requests位置
for(i=1;count<max_cache_size;i++)//cache还没满
{
for(int j=1;j<max_cache_size;j++)
{
if(page_requests[i]==cache[j])
{
flag = true;
break;
}
}
if(!flag)//缓存中没有该请求页,直接加入缓存
{
cache[count] = page_requests[i];
count++;
}
flag = false;
}
for(int m=i;m<len;m++)//cache已满
{
for(int j=0;j<max_cache_size;j++)//逐一比较
{
if(page_requests[m]==cache[j])
{
flag = true;
break;
}
}
if(!flag)
{
for(int n=0;n<max_cache_size-1;n++)//除了最后一个位置,其他位置前移
cache[n] = cache[n+1];
cache[max_cache_size-1] = page_requests[m];//新来的页面放在最后一个位置
count++;
}
flag = false;//注意flag位置!
}
delete []cache;
return count;
}
int main()
{
int maxsize;
cout<<"请输入缓存最大值: ";
cin>>maxsize;
int len;
cout<<"请输入页面请求个数 :";
cin>>len;
int *array = new int[len];
cout<<"请输入要请求的页面 :";
for (int i=0;i<len;i++)
cin>>array[i];
cout<<"请求失败值为:"<<countCacheMiss(maxsize,array,len)<<endl;;
system("pause");
return 0;
}