加倍C ++数组的大小

时间:2014-10-30 18:12:23

标签: c++ arrays pointers

以下代码片段是我尝试将数组大小增加两倍。我有几个问题。最重要的是,我应该在原始数组上调用delete吗?

void enlarge(int *array, int* dbl  int size) {
    for (int i = 0; i < size; i++)
       dbl[i] = array[i];
    delete array;
    array = dbl;
}

2 个答案:

答案 0 :(得分:6)

你有一些问题:

  • 修改array仅修改指针的本地副本。如果要通过调用代码观察修改,则需要使用引用指针。
  • 删除使用delete[]分配的内容时,您需要使用new[]
  • 您尝试复制太多项目,这样就会超出原始数组。

void enlarge(int *& array, int size) {
//                ^
// Use a reference to a pointer.

    int *dbl = new int[size*2];
    for (int i = 0; i < size; i++) {
    //                  ^
    // Iterate up to size, not size*2.
        dbl[i] = array[i];
    }
    delete[] array;
    //    ^
    // Use delete[], not delete.
    array = dbl;
}

但是,强烈建议您使用std::vector<int>;它会根据需要自动调整大小,这对你来说是完全透明的。

答案 1 :(得分:1)

关键字double不能用作变量名,并且在将新分配分配给同一指针之前必须删除先前的数组,并且循环应该复制来自prev数组的项目的大小no(不是2 * size)

void enlarge(int **array, int size) {
    int *d = new int[size*2];
    for (int i = 0; i < size; i++)
       d[i] = *array[i];
    delete [] *array;
    *array = d;
}

如果前一个数组是int * arr,而size是数组arr的currentize,则调用应为:enlarge(&arr, size)