簡體   English   中英

函數將數組大小任意倍增?

[英]function to double size of array arbitrary number of times?

我正在嘗試讓此函數創建一個新數組,其大小為array參數的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; 數字= 3; 我希望它輸出0 1 0 2 0 2 0 4 0 2 0 4 0 4 0 8

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;
};

c數組范圍從0到size-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;
 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM