加倍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;
}
答
关键字双不能作为变量名,前一阵必须在新的分配被删除,会被分配到相同的指针和循环应该复制大小没有从上一个阵列(而不是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>
代替;它会根据需要自动调整大小,这对您来说是完全透明的。
'for(int i = 0; i
Galik
2014-10-30 18:14:19
为什么不使用'std :: vector'? –
cdhowie
2014-10-30 18:15:00
不使用[vector](http://www.cplusplus.com/reference/vector/vector/)的任何特定原因? – Michael 2014-10-30 18:15:06