代码那里有错误,帮我看看好吗,运行到一半报错,如果设计随机数也有一半的几率报错

#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的,你的编译器是不是太老。