#include<iostream>
#include<vector>
#include<random>
#include<list>
#include<numeric>
#include<algorithm>
using namespace std;
const static auto page_frame = 3;
vector<int>vec = { 0,0,1,1,0,3,1,4,4,2,2,3 };
vector<int>sp(page_frame, -1);
class LRU {
public:
random_device r;
size_t fault = 0;
vector<vector<int>>page;
inline static size_t nums = 0;
inline static size_t reverse_nums =
page_frame - 1;
auto set_page_frame();
auto set_random(); auto algor();
auto shower();
auto have(int num);
auto find_index(int num);
};
auto LRU::have(int num) {
for (auto s : page) {
if (num == s[0])
return true;
}
return false;
}
auto LRU::set_random() {
for (auto i = 0; i < 50; ++i)
vec.push_back(r() % 20);
}
auto LRU::set_page_frame() {
for (auto i = 0; i < page_frame; ++i)
page.push_back(vector<int>{-1});
}
auto LRU::shower() {
for (auto s : page) {
cout << s[0] << " -> " << ends;
}
}
auto LRU::find_index(int num) {
for (size_t i = 0; i < page_frame; ++i)
if (page[i][0] == num)
return i;
}
auto LRU::algor() {
for (auto i = 0; i < vec.size(); ++i)
{
int tmp = vec[i];//方便拷贝
if (!have(vec[i]))//如果发生缺页
{
fault++;//缺页数++
if (page[nums][0] == -1) {//如果页框未满
page[nums][0] = tmp;
nums++;
nums %= page_frame;
sp[reverse_nums--] = tmp;
reverse_nums %= page_frame;
}
else {
auto index =
find_index(sp[page_frame - 1]);
sp[page_frame - 1] = tmp; stable_partition(sp.begin(),
sp.end(), [=](int num)->auto{return num == tmp ? 1
: 0; });//有,移到最上,lambda表示一个谓语
page[index][0] = tmp;
}
//for (auto cao : sp)
//cout << cao << ends;
shower();
cout << endl;
}
else {
shower();
stable_partition(sp.begin(),
sp.end(), [=](int num) {return num == tmp ? 1 :
0; });
//for (auto cao : sp)
//cout << cao << ends;
cout << endl;
}
}
}
int main() {
LRU two;
//two.set_random();
two.set_page_frame();
two.algor();
cout << "缺页次数" << two.fault << endl;
}
头文件都没有,而且你这个是c++14的,你的编译器是不是太老。