gpt4 book ai didi

c++ - 计算导致段错误的 std::vector 的中值

转载 作者:太空狗 更新时间:2023-10-29 23:30:25 26 4
gpt4 key购买 nike

下面的函数应该计算 std::vector<double> 的中位数.

double vecMed(vector<double>& vec) {

vector<double> copyVec = vec;

sort(copyVec.begin(), copyVec.end());

if( copyVec.size()%2 == 0)
return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;
else
return copyVec[copyVec.size()/2];
}

我在这一行遇到段错误,有时:

return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;

有人能看出这个函数有问题吗?

段错误可能是由于我不知道的其他地方的内存损坏造成的,但我想在探索这种可能性之前确保我没有在上面的代码中犯下微妙或粗心的错误。


GDB 说:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000428ab6 in vecMed (this=0x7fffffffd1b0, vec=...) at ../globals.cpp:834
834 return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;
(gdb) bt
#0 0x0000000000428ab6 in vecMed (this=0x7fffffffd1b0, vec=...) at ../globals.cpp:834

最佳答案

代码中有这么多错误!我想你想要:

#include <algorithm>
#include <vector>

double vecMed(std::vector<double> vec) {
if(vec.empty()) return 0;
else {
std::sort(vec.begin(), vec.end());
if(vec.size() % 2 == 0)
return (vec[vec.size()/2 - 1] + vec[vec.size()/2]) / 2;
else
return vec[vec.size()/2];
}
}

关于c++ - 计算导致段错误的 std::vector<double> 的中值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20682506/

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