我想知道这是否是使用类中的指针创建临时数组的正确方法。我的部分问题是这样说的:
getMedian - 返回数组的中值。有关术语中位数的讨论,请参见第10章编程挑战6(p.693)。取中位数将需要一个排序数组。您将需要创建一个临时数组来对值进行排序(以保留数字的顺序)。不要对私有成员号数组进行排序。在getMedian函数中动态分配/释放临时数组以确定中位数。
我的代码:
double Statistics::getMedian() const
{
int tempArray[length];
for (int k = 0; k < length; k++){
tempArray[k] = numbers[k];
}
bubbleSort(tempArray);
return 0;
}
在显然做中间部分和正确的返回声明之前,是这个。
如何正确复制临时数组以更改此问题?我不认为这是因为我没有正确分配或解除分配任何东西,但我不明白如何在不改变原始数据的情况下创建临时数组。
答案 0 :(得分:1)
您的作业说您要动态分配/取消分配数组。这意味着(在C ++中)使用new
和delete
。由于您需要数组,因此应使用数组空间分配器运算符new[]
和delete[]
。
double Statistics::getMedian() const
{
int *tempArray = new int[length];
for (int k = 0; k < length; k++){
tempArray[k] = numbers[k];
}
// work with tempArray
delete[] tempArray;
return 0; // or the median
}
编辑: 正如下面的评论中所建议的那样,现代(C ++ 11和更新)方法是使用smart pointers。这意味着你的代码看起来像这样。
#include <memory>
double Statistics::getMedian() const
{
std::unique_ptr<int[]> tempArray (new int[length]);
for (int k = 0; k < length; k++){
tempArray[k] = numbers[k];
}
// work with tempArray like you would with an old pointer
return 0; // or the median
// no delete[], the array will deallocate automatically
}
查看unique_ptr template class了解详情。请注意,此解决方案可能不是您的教授想要的,特别是当作业谈到解除分配时。