无法理解错误

Unable to understand error

我写了一个合并排序算法如下,但是在编译它时我得到以下内容,其中说明 表达式:向量下标超出范围

我不明白为什么会出现这个错误,请指出错误,我根据我对合并排序算法的理解编写了这个算法

根据我的理解,我编写了一个递归函数(mergesort),其中每次将有问题的数组分为左右两部分,然后将左右数组进一步细分,直到一旦这个阶段到达,子数组中只有 1 个元素,调用合并函数对分区数组进行排序,并将其合并到原始数组,从中分区数组,递归在递归树中向后退一步

这里是源代码

#include<iostream>
#include<vector>
using namespace std;
class Soham
{
    vector<int> v;
public:
    Soham();
    void merge(vector<int> &, vector<int> & ,vector<int> &);
    void mergesort(vector<int> &);
};
Soham::Soham()
{
    int no;
    for (int i = 0; i < 5; i++)
    {
        cin >> no;
        v.push_back(no);
    }
    mergesort(v);
    cout << "result" << endl;
    for (auto it = v.begin(); it != v.end(); it++)
        cout << *it << " ";
}
void Soham::mergesort(vector<int> &v)
{
    if (v.size() < 2)
        return;
    else
    {
        vector<int>left, right; 
        if (v.size() % 2 == 0)//if input size is even
        {
            auto it = v.begin() + (v.size() / 2);
            left.assign(v.begin(),it);
            right.assign(it, v.end());
        }
        else// if input size is odd
        {
            auto it = v.begin() + (v.size() / 2);
            left.assign(v.begin(),next(it));
            right.assign(next(it), v.end());
        }
        mergesort(left);
        mergesort(right);
        merge(left, right,v);
    }
}
void Soham::merge(vector<int> &temp_left, vector<int> &temp_right,vector<int> &temp_main)
{
    int i = 0, j = 0, k = 0;
    while (i<= temp_left.size() && j <= temp_right.size())
    {
        if (temp_left[i] <= temp_right[j])
        {
            temp_main[k] = temp_left[i];
            i++;
            k++;
        }
        else
        {
            temp_main[k]=temp_right[j];
            j++;
            k++;
        }
    }
    while (i <= temp_left.size())
    {
        temp_main[k]=temp_left[i];
        i++;
        k++;
    }
    while (j <= temp_right.size())
    {
        temp_main[k]=temp_right[j];
        j++;
        k++;
    }
}
int main()
{
    Soham a;
    system("pause");
    return 0;
}

感谢帮助

while (i <= temp_left.size())

当您以索引 size() 访问向量时,您将获得越界访问