我的老师对于赋值问题要求我们将数组传递给只找到它的中位数的函数。如果有一个偶数的数字,它将两个平均值放在中间。我引用他的话说“尽可能使用指针”。我能用指针看到的唯一一个是数组本身吗?
我理解需要发生什么的概念,我只是不确定如何正确使用指针而谷歌搜索并没有显示太有用的结果。
int medianArray(int *pArray, int sizeArray)
{
if(sizeArray % 2 == 1)
{
return (pArray[((int)(sizeArray/2)) -1 ] + pArray[((int)(sizeArray/2)) +1 ]) / 2;
}
else
return pArray[(int) sizeArray/2];
}
答案 0 :(得分:3)
你在这里有正确的想法,但你计算你的偏移是错误的。
这是一个想法:
int
如果值超过size_t
范围,请不要忘记这会失败,此外,您应该使用int
来表示尺寸,因为它永远不会是负数。
此外,将StartYear
计算的结果转换为int。
关于这个C ++课程,我认为任何违反标准库中规定的原则的事情都有更好的理由。虽然总是鼓励对指针与迭代器与参考文献的好处进行学术探索,但“尽可能”提出指针是一个糟糕的计划,并且来自C思维模式。
在现代C ++课程中,这项任务将围绕通过定义模板函数来计算任意类型的未排序标准库容器的中位数。
答案 1 :(得分:1)
这样当你说“现代c ++不使用指针”等时,你可以对人们谈论的内容有一个具体的感受。
一种替代方法是使用std :: vector
int medianArray(const std::vector<int> &vec)
{
int sizeArray = vec.size();
if(sizeArray % 2 == 1)
{
return (vec[((int)(sizeArray/2)) -1 ] + vec[((int)(sizeArray/2)) +1 ]) / 2;
}
else
return vec[(int) sizeArray/2];
}
请注意,矢量知道它有多大。如果您使用vec.at(index)