求向量的中位数

时间:2019-11-19 17:58:38

标签: c++ vector

我有一个用于查找数组中位数的函数,但是由于某种原因,我收到一条消息,指出在打印结果时找不到该函数。我认为这与数组存储在向量中有关,但是我仍然被卡住。

#include <iostream>
#include <vector>
#include <algorithm>

double findMedian(int list1[], int n)
{
    std::sort(list1, list1+n);

    if (n % 2 != 0)
        return (double)list1[n/2];

    return (double)(list1[(n-1)/2] + list1[n/2])/2.0;
}

int main() {

    std::vector<int> list1;
    int n = sizeof(list1)/sizeof(list1[0]);

    int number;
    float sum=0;
    int count=0;
    int avg;

    std::cin >> number;
    list1.push_back(number);
    sum = sum + number;
    avg = sum/count;

    while (number != 0){
        std::cin >> number;
        list1.push_back(number);
        count++;
        sum = sum + number;
        avg = sum/count;
    }
    list1.pop_back();

    std::sort(list1.begin(), list1.end(), std::greater<int>());

    std::cout << "Average: \n" << avg << std::endl;
    std::cout << "Median: " << findMedian(list1, n) << std::endl;
    std::cout << "Sorted descending: \n";
    for (auto x : list1)
        std::cout << x << " ";

    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的问题是将std::vector对象list1视为数组。它不是int值的数组,而是一个std::vector<int>对象,完全不同。

您的通话

findMedian(list1, n)

试图找到不存在的功能double findMedian(std::vector<int>, int)

您可以通过更改findMedian函数以实际接受向量作为参数(然后不需要大小)来解决此问题,或者通过将指针传递给向量数据来解决。我推荐第一个解决方案。

答案 1 :(得分:1)

向量的大小仅为v.size(),而不是您在此处写的内容

int n = sizeof(list1)/sizeof(list1[0]);

此呼叫应更改为

findMedian(list1, n)

findMedian(list1.data(), n)

因为向量不是数组。

更正这些,您的代码即可使用。