C++ 合并排序-向量下标超出范围

C++ 合并排序-向量下标超出范围,c++,sorting,vector,C++,Sorting,Vector,我正试图让一个合并排序程序工作,以及一个已经在工作的基数排序,使用向量 然而,合并排序总是给我“向量下标超出范围”错误。我知道为什么会出现这个错误,但我不知道应该做什么改变来阻止它 代码: #包含“Includes.h” 类合并排序 { 公众: std::vector合并排序(std::vector列表、整数低、整数高、整数最大) { int mid; if(low

我正试图让一个合并排序程序工作,以及一个已经在工作的基数排序,使用向量

然而,合并排序总是给我“向量下标超出范围”错误。我知道为什么会出现这个错误,但我不知道应该做什么改变来阻止它

代码:

#包含“Includes.h”
类合并排序
{
公众:
std::vector合并排序(std::vector列表、整数低、整数高、整数最大)
{
int mid;
if(lowwhile((h从不使用参数max。通常,mergesort的正确索引是结束索引(比向量中的最后一个索引多一个)。in merge(),将h和i设置为low-1将导致超出范围问题,请将它们都设置为low,而不是low-1。由于合并会复制回列表,因此mergesort和merge应该是使用参数引用的无效函数:

void mergeSort(std::vector<int> &list, int low, int high)

void merge(std::vector<int> &list, int low, int mid, int high)
在“合并”中,早期行应为:

    if ((high-low) > 1)   // nothing to do if 0 or 1 elements
    { // This will be when the given set is a single number.
        mid = low + (high - low) / 2;
        mergeSort(list, low, mid);
        mergeSort(list, mid, high);
        merge(list, low, mid, high;
    h = low;
    i = low;
    j = mid;

    while ((h < mid) && (j < high))    // change <= to <
    mergeSort(std::vector<int> list, 0, list.size());
h=低;
i=低;
j=中等;

而((h1)…我更新了我的答案来说明这一点。
    h = low;
    i = low;
    j = mid;

    while ((h < mid) && (j < high))    // change <= to <
    mergeSort(std::vector<int> list, 0, list.size());