c++ - 为什么我在合并排序中出现 vector 下标超出范围错误?

标签 c++ algorithm sorting mergesort

void merge(vector<int> dst,vector<int> first,vector<int> second)
{
    int i=0,j=0;

    while(i<first.size()&&j<second.size())
    {
        if(first[i]<second[j])
        {
            dst.push_back(first[i]);
            i++;
        }
        else
        {
            dst.push_back(second[j]);
            j++;
        }
    }
    while(i<first.size()
    dst.push_back(first[i++]);

    while(j<second.size())
    dst.push_back(second[j++]);
}

void mergeSort(vector<int> &a)
{   
    size_t sz = a.size();
    cin.get();
    if(sz>1)
    {   
        vector<int> first(&a[0],&a[sz/2]);
        vector<int> second(&a[(sz/2)+1],&a[sz-1]);

        mergeSort(first);
        mergeSort(second);

        merge(a,first,second);  
    }
}

void MergeSort(int* a,size_t size)
{
   vector<int> s(&a[0],&a[size-1]);
   mergeSort(s);
}

有人能帮我看看这段代码有什么问题吗?我收到 vector 下标超出范围错误。

最佳答案

如果 sz == 2,&a[(sz/2)+1] 将尝试获取 a[2] 的地址,这将给您带来此错误。

关于c++ - 为什么我在合并排序中出现 vector 下标超出范围错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563173/

相关文章:

algorithm - 为什么在快速排序中选择随机枢轴

c++ - 是否可以检查两个类是否具有相同的成员

excel - 3 Excel 中的变量加权平均值

string - 将后缀按后缀数组排序有何意义?

java - 我如何按降序完成排序?

c++ - 查找一定范围内的网格单元

javascript - 从下拉列表中的数组中选择某个项目,然后将其显示为第一项并按字母顺序显示。

c++ - 需要UDP端口转发吗?

c++ - 在没有嵌套 for 循环的情况下查找另一个 vector 中 vector 条目的出现

c++ - 是否有真正的 64 位版本的 msvcr80.dll?如果不是,为什么不呢?