簡體   English   中英

在嘗試分配向量時拋出Mergesort - std :: bad_alloc

[英]Mergesort - std::bad_alloc thrown when trying to assign vector

女士們和男士們,下午好。 所以,這不是我錯誤的日子。 在C ++中實現Mergesort(非就地),我遇到了代碼真正的麻煩,不明白為什么。 mergeSort()函數的倒數第二行將merge()的結果分配給int的result向量。 這一行(實際分配,而不是函數)拋出bad_alloc錯誤,我不知道為什么。

互聯網表明, bad_alloc主要是由於內存不足錯誤引發的,但是這種情況並非如此,因為第一次調用它是在一個500英寸的向量上,這應該是沒有太多的內存(這是什么,像32位int上的2 Kb?)。 我假設我正在為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進行引用並在函數期間編輯它,它工作正常,但我想保持代碼盡可能接近為合並排序給出的'標准'偽代碼。

我感謝任何幫助,謝謝。

Merge函數中,不返回vector<int> result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM