2017-08-04 191 views
0

我正在努力弄清楚我出错的地方。我的目标是将数组大小加倍,并将原始值两次复制到新数组中。目前只打印出6个零。请帮忙!!动态数组和重复值

#include <iostream> 
using namespace std; 

void repeatArray(double *&myArray, int size) 
{ 
     double *repeatArray = new double[size * 2]; 

     for(int i =0; i < size; i++) 
     { 
       myArray[i] = repeatArray[i]; 
     } 

     delete [] myArray; 
     myArray = repeatArray; 
} 

int main() 
{ 
    double* myArray = new double[3]; 
    myArray[0] = 1; 
    myArray[1] = 2; 
    myArray[2] =3; 
    repeatArray(myArray, 3); 

    for (int i=0; i<6; i++) 
    { 
     cout << myArray[i] << endl; 
    } 
    delete []myArray; 
    return 0; 
} 
+0

'repeatArray()'不会改变size'的'的价值,所以循环只复制三个值。它只会将'repeatArray'中的值复制到'myArray',而它需要从'myArray'复制到'repeatArray'。 – Peter

回答

1

myArray[i] = repeatArray[i];是错误的。 repeatArray函数中应该是repeatArray[i] = myArray[i];

好吧,我错过了副本的两倍以上部分..

void repeatArray(double *&myArray, int size) 
{ 
     double *repeatArray = new double[size * 2]; 

     for(int i =0; i < size; i++) 
     { 
       repeatArray[i] = myArray[i]; 
       repeatArray[i+size] = myArray[i]; 
     } 

     delete [] myArray; 
     myArray = repeatArray; 
} 

这将拷贝过来corectly的值,并将它过来twicew

+0

谢谢!现在它只打印前3个值,然后再打零。我的循环不正确? –

+0

是的,你只分配了前3个值 –

+0

我将如何循环再次?我对如何将原始值复制到新阵列两次感到困惑 –

0
for(int i =0; i < *size*; i++) 
     { 
       myArray[i] = repeatArray[i]; 
     } 

你的程序只打印3个值,因为你没有为您的新阵列分配适当的值。问题是,你遍历旧的大小,而不是大小* 2。

你可能应对这样说:

for (int i = 0; i < size * 2; i++) 
{ 
    // The first part of the array 
    if (i < size) 
    { 
     // Copy values from another array 
     repeatArray[i] = myArray[i]; 
    } 
    // The second part of the array 
    else 
    { 
     // Copy valeus from the first part 
     repeatArray[i] = myArray[i - size]; 
    } 
} 
+0

因此,我将其更改为循环遍历新大小,并将第四个值是“3.21143e-322” –

+0

第四个值是垃圾数据,因为您的数组的大小为3. – hoodaticus

+0

第5和第6个值是1和2,这不是垃圾。为什么只有第四个? –