C++ C++;无法获得中值的正确答案

C++ C++;无法获得中值的正确答案,c++,vector,median,C++,Vector,Median,好的,我创建了一个程序,它接受一个向量并计算中值。虽然我得到了正确的奇数中值,但我得到的偶数中值并不相同。这是我的密码: #include <iostream> #include <vector> using namespace std; int main() { bool check; cout<<"Hello World"; vector<double> vec; vec.push_back(2);

好的,我创建了一个程序,它接受一个向量并计算中值。虽然我得到了正确的奇数中值,但我得到的偶数中值并不相同。这是我的密码:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    bool check;
    cout<<"Hello World";
    vector<double> vec;

    vec.push_back(2);
    vec.push_back(6);
    vec.push_back(8);
    vec.push_back(62);

    double median;
    if(check==vec.size()%2)
    {
        median=(vec[vec.size() / 2 - 1] + vec[vec.size() / 2]) / 2;
    }
    else{
         median=vec[(vec.size() / 2.0)];
    }
    cout<<median;
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
布尔检查;

cout我重写了您的代码并清除了一些不必要的变量。我计算了数组大小
n
和中点
centerElement
。您不想重复进行此计算,特别是在数组非常大的情况下

我还删除了布尔变量
check
,这是完全不必要的。通过将其与
0

    #include <iostream>
    #include <vector>
    using namespace std;

    int main()

{
    vector<double> vec;    
    vec.push_back(2);
    vec.push_back(6);
    vec.push_back(8);
    vec.push_back(100);
    auto n = vec.size();
    auto centerElement = n/2;

    double median;
    if(n%2 == 0)
    {
        median=(vec[centerElement - 1] + vec[centerElement]) / 2;
    }
    else{
         median=vec[(centerElement)];
    }
    cout<<median;
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
向量向量机;
向量推回(2);
向量推回(6);
向量推回(8);
向量推回(100);
自动n=向量大小();
自动中心元素=n/2;
双中位数;
如果(n%2==0)
{
中位数=(vec[centerElement-1]+vec[centerElement])/2;
}
否则{
中位数=向量[(中心元素)];
}

check
有什么用途?特别是考虑到
check
未初始化,因此具有不确定的值,在使用它时会导致未定义的行为。为什么不只使用
std::nth_元素(vec.begin(),vec.begin()+vec.size()/2,vec.end());std::cout@JesperJuhl他已经有了一个排序数据。现在他在处理奇数或偶数大小的数据时遇到了问题。@MarekR在这种情况下是排序的,是的。但是我想提出一个不依赖于预排序数据的通用解决方案。至于偶数与奇数大小,我相信你不需要处理超出我建议的大小。对于偶数元素的数量,你必须在中点之前或之后选择元素,但是你选择哪一个并不重要,我的解决方案总是选择较低的。这应该是好的。唯一要处理的角情况是一个空向量。