将C++数组的大小增加一倍

Doubling the Size of a C++ Array

本文关键字:一倍 增加 C++ 数组      更新时间:2023-10-16

下面的代码片段是我将数组大小增加2倍的尝试。我遇到了一些问题。最重要的是,我应该对原始数组调用delete吗?

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

您有几个问题:

  • 修改array仅修改指针的本地副本。如果希望调用代码能够观察到修改,则需要引用指针
  • 删除使用new[]分配的内容时,需要使用delete[]
  • 您试图复制过多的项,这样做会使原始数组溢出

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>;它会根据需要自动调整大小,这对你来说是完全透明的。

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

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的当前大小,则调用应为:enlarge(&arr, size)