int LRUNotIn(int max_size, int *page_arr, int len)//返回缺页次数,max_size缓存大小,page_arr访问页面顺序的数组,len其长度
#include<iostream>
#include<vector>
using namespace std;
int LRUNotIn(int max_size, int *page_arr, int len)
{
int count = 0;
if (page_arr != NULL)
{
vector<int> vec_cache;
vector<int>::iterator p;
int j = 0;
for (int i = 0; i<len; i++)
{
if (max_size > vec_cache.size())//缓存空间有多余
{
for (j = 0;j < vec_cache.size(); j++)
{
if (vec_cache[j] == page_arr[i])//已经在在缓存中
{
p = vec_cache.begin() + j;//将该页放到数组末尾
vec_cache.erase(p);
vec_cache.push_back(page_arr[i]);
break;
}
}
if (j == vec_cache.size())//不在缓存中
{
count++;
vec_cache.push_back(page_arr[i]);//缺页数+1,并且把该页放到数组最后
}
}
else//如果缓存已经满了
{
for (j = 0; j < vec_cache.size(); j++)
{
if (vec_cache[j] == page_arr[i])//该页在缓存中,就将该页移到数组末尾
{
p = vec_cache.begin() + j;
vec_cache.erase(p);
vec_cache.push_back(page_arr[i]);
break;
}
}
if (j == vec_cache.size())//不在缓存中,就移除数组首元素(最久没有访问的),然后将该页放到数组末尾
{
count++;
p = vec_cache.begin();
vec_cache.erase(p);
vec_cache.push_back(page_arr[i]);
}
}
}
vec_cache.clear();
}
return count;
}
int main()
{
int page[5] = { 7, 0, 1 ,1,0};
cout << LRUNotIn(3, page, 5) << endl;
system("pause");
return 0;
}