下午好女士和绅士。因此,这不是我遇到错误的一天。在C ++中实现Mergesort(不适当),我在代码上遇到了真正的麻烦,不知道为什么。二次 mergeSort() 功能分配了 merge() 到INT的向量, result. 。这条线(实际分配,而不是功能)抛出 bad_alloc 错误,我不知道为什么。

互联网表明 bad_alloc 主要是由于不可存储的错误而抛出的,但事实并非如此,因为它首次被称为500 int的向量,这应该远不及过多的内存(那是什么,就像2 kb一样32位int?)。我认为我对C ++做一些愚蠢而不正确的事情,但我不知道。我尝试打电话 what() 除了例外,但这只是返回其名称。编码:

vector<int> Sorting::mergeSort(vector<int> A) {

    // If the length of A is 0 or 1, it is sorted.
    if(A.size() < 2) return A;

    // Find the mid-point of the list.
    int midpoint = A.size() / 2;

    // Declare the left/right vectors.
    vector<int> left, right;

    // Declare the return vector.
    vector<int> result (A.size());

    for(int i = 0; i < midpoint; ++i) {
        left.push_back(A.at(i));
    }

    for(int i = midpoint; i < A.size(); ++i) {
        right.push_back(A.at(i));
    }

    left = mergeSort(left);
    right = mergeSort(right);
    result = merge(left, right);

    return result;

}


vector<int> merge(vector<int> left, vector<int> right) {

    vector<int> result;

    while(left.size() > 0 && right.size() > 0) {

        if(left.front() <= right.front()) {
            result.push_back(left.front());
            left.erase(left.begin());
        } else {
            result.push_back(right.front());
            right.erase(right.begin());
        }
    }

    if(left.size() > 0) {
        for(int i = 0; i < left.size(); ++i) {
            result.push_back(left.at(i));
        }
    } else {
        for(int i = 0; i < right.size(); ++i) {
            result.push_back(right.at(i));
        }
    }

}

如果我重写 merge 功能只需参考 result 并在功能期间编辑它,它可以正常工作,但是我想将代码尽可能靠近与合并 - 列出的“标准” psuedo代码。

感谢任何帮助,谢谢。

有帮助吗?

解决方案

在里面 Merge 功能, vector<int> result 没有返回。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top