使用指针C ++创建临时数组

时间:2016-04-08 23:02:21

标签: c++ arrays pointers

我想知道这是否是使用类中的指针创建临时数组的正确方法。我的部分问题是这样说的:

  

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

在显然做中间部分和正确的返回声明之前,是这个。

如何正确复制临时数组以更改此问题?我不认为这是因为我没有正确分配或解除分配任何东西,但我不明白如何在不改变原始数据的情况下创建临时数组。

1 个答案:

答案 0 :(得分:1)

您的作业说您要动态分配/取消分配数组。这意味着(在C​​ ++中)使用newdelete。由于您需要数组,因此应使用数组空间分配器运算符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了解详情。请注意,此解决方案可能不是您的教授想要的,特别是当作业谈到解除分配时。