2015-01-21 54 views
0

我想獲得這個函數來創建一個新的數組爲2倍的數組參數的大小,將內容複製到新的數組,併爲數組的後半部分,通過做2 *的值創建新的值數組的前半部分,然後刪除原始數組。重複此過程達指定的次數,然後返回新的數組。我覺得我有正確的算法,但我的代碼不起作用。請幫忙!函數將數組的大小加倍任意多少倍?

int *ArrayDynamicAllocation(int array[], int size, int number) 
{ 
    int *new_array = NULL; 

    for(int i=0; i<number-1; i++) 
    { 
     new_array = new int[size*2]; 
     for(int j=0; j<size-1; j++) 
     { 
      new_array[j]=array[j]; 
      new_array[j+size]=2*array[j]; 
     } 
     array=new_array; 
     delete[] array; 
     size=size*2;  
    } 
    return new_array; 
} 

一個例子輸出將是如果我的信息,以把我的功能是 INT ARR [2] = {0,1}; array_size = 2; number = 3; 我希望它輸出0 1 0 2 0 2 0 4 0 2 0 4 0 4 0 8

+0

[關接一個(HTTP://en.wikipedia .ORG /維基/關逐one_error)。 'size-1'應該是'size','number-1'應該是'number'。 – Pradhan 2015-01-21 04:39:09

+0

'array = new_array; delete [] array;'結果不會很好,既不適合你的後續迭代也不適合你的最終返回值。很確定你想要這些行*顛倒*。 – WhozCraig 2015-01-21 04:39:48

回答

1
int *ArrayDynamicAllocation(int array[], int size, int number) 
{ 
    int *new_array = NULL; 
    int *tmp_array = new int[array.length()]; 
    for(int k=0; k<array.length(); k++)//Initial array copying. 
     tmp_array[k] = array[k]; 

    for(int i=0; i<number; i++)//Array range 0 to n-1 
    { 
     new_array = new int[size*2]; 
     for(int j=0; j<size; j++)//Array range 0 to n-1 
     { 
     new_array[j]=tmp_array[j]; 
     new_array[j+size]=2*tmp_array[j]; 
     } 
     delete[] tmp_array //Deleting old array 
     size=size*2; 
     tmp_array = new int[size] //Allocating memory for next iteration 
     for(int k=0; k<size; k++) 
     tmp_array[k] = new_array[k];//Copying array for next iteration 
    } 
    delete[] tmp_array;// To free memory 
    return new_array; 
}; 
+0

非常感謝!如果數組爲[0],如何處理大小寫? – 2015-01-21 05:52:29

+0

如果array.length()> 0做所有其他返回相同的輸入數組作爲輸出,您可以驗證在第一行本身。 – 2015-01-21 05:58:12

+0

@walshjm ::標記它的答案,如果它幫助你。 – 2015-01-21 06:16:23

0

數組c範圍從0到大小-1
變化

for(int i=0; i<number-1; i++) 

for(int i=0; i<=number-1; i++) 

變化

for(int j=0; j<size-1; j++) 

for(int j=0; j<=size-1; j++) 

要刪除錯誤的陣列
變化

array=new_array; 
delete[] array; 

delete[] array; 
array=new_array; 
0
template<class T> 
void changeSize1d(T*&a, const int oldSize, const int newSize){ 
if(newSize<0)return 0; 
T*temp new T[newSize]; 
int number = min(oldSize, newSize); 
copy(a, a+number, temp); 
delete [] a; 
a = temp; 
} 
+1

你能否詳細說明爲什麼你認爲這是正確的答案? – Squazz 2017-11-03 10:38:58