我是否正确使用了指针和数组
Am I using pointers and array correctly?
我的老师针对一个作业问题要求我们将一个数组传递给一个函数,该函数只找到它的中值。如果有偶数,它会对中间的两个值取平均值。我引用他的话"尽可能使用指针"。我唯一能看到的使用指针的是数组本身吗?
我理解需要发生什么的概念,我只是不确定如何正确使用指针,谷歌搜索也不会显示太有用的结果。
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];
}
请注意,vector知道它有多大。如果使用vec.at(index)
,它也不会从两端溢出
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空