我有一个用于查找数组中位数的函数,但是由于某种原因,我收到一条消息,指出在打印结果时找不到该函数。我认为这与数组存储在向量中有关,但是我仍然被卡住。
#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;
}
答案 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)
因为向量不是数组。
更正这些,您的代码即可使用。