下面的代碼片段是我嘗試將數組大小增加一倍。我遇到了幾個問題。最重要的是,我應該在我的原始數組上調用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;
}
下面的代碼片段是我嘗試將數組大小增加一倍。我遇到了幾個問題。最重要的是,我應該在我的原始數組上調用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