gpt4 book ai didi

c++ - Mergesort - 尝试分配 vector 时抛出 std::bad_alloc

转载 作者:太空狗 更新时间:2023-10-29 21:30:03 24 4
gpt4 key购买 nike

女士们先生们下午好。所以,今天不是我犯错的日子。在 C++ 中实现 Mergesort(不是就地),我在处理代码时遇到了真正的问题,不知道为什么。 mergeSort() 函数的倒数第二行将 merge() 的结果分配给整数 vector result。这一行(实际分配,而不是函数)抛出一个 bad_alloc 错误,我不知道为什么。

互联网表明 bad_alloc 主要是由于内存不足错误而抛出的,但事实并非如此,因为它第一次调用是在 500 整数的 vector 上,这应该是几乎没有太多内存(那是什么,比如 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没有被退回。

关于c++ - Mergesort - 尝试分配 vector 时抛出 std::bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com