无法理解错误

时间:2017-08-26 14:56:45

标签: c++ vector mergesort

我已经编写了一个mergesort算法如下,但在编译它时,我得到以下内容,其中说明了这一点 表达式:向量下标超出范围

我不明白为什么我会收到这个错误,plz指出错误,我根据我对mergesort算法的理解编码了这个算法

根据我的理解,我编写了一个递归函数(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;
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

(?=[-+])

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