繁体   English   中英

我是否正确使用了指针和数组?

[英]Am I using pointers and array correctly?

对于分配问题,我的老师要求我们将数组传递给仅能找到其中位数的函数。 如果有偶数,则将中间的两个取平均值。 我引用他的话“尽可能使用指针”。 使用指针我唯一能看到的就是数组本身?

我了解需要发生的情况的概念,只是不确定如何正确使用指针,而Google搜索也不会揭示有用的结果。

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];
}

您在这里有个正确的主意,但您计算出的偏移量是错误的。

这是一个主意:

size_t median = sizeArray / 2;

return (pArray[median] + pArray[median+1]) / 2;

不要忘记,如果值超过int界限,它将失败,此外,您应该使用size_t来表示尺寸,因为它永远不能为负数。

此外,将int计算的结果转换为int没有意义。

关于本C ++课程,我认为任何与标准库中列出的原理背道而驰的方法都有很好的理由。 虽然总是鼓励人们对指针,迭代器和引用的好处进行学术探索,但“尽可能”提倡指针是一个糟糕的计划,并且源于C语言。

在现代C ++课程中,此任务将围绕通过定义模板函数来计算任意类型的未排序标准库容器的中位数。

只是这样,您可以对人们所说的“现代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)它也不会在两端运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM