加倍C++数组的大小

问题描述:

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

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

'for(int i = 0; i Galik 2014-10-30 18:14:19

+4

为什么不使用'std :: vector '? – cdhowie 2014-10-30 18:15:00

+1

不使用[vector](http://www.cplusplus.com/reference/vector/vector/)的任何特定原因? – Michael 2014-10-30 18:15:06

关键字双不能作为变量名,前一阵必须在新的分配被删除,会被分配到相同的指针和循环应该复制大小没有从上一个阵列(而不是2 *大小)

项目
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的currentsize,电话应为:enlarge(&arr, size)

你有几个问题:

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