2017-08-04 1 views
0

J'ai du mal à comprendre où je me trompe. Mon objectif est de doubler la taille d'un tableau et de copier les valeurs d'origine deux fois dans le nouveau tableau. Ceci est actuellement en train d'imprimer 6 zéros. S'il vous plaît aider !!Tableau dynamique et valeurs répétées

#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()' ne change pas la valeur de 'size', donc la boucle copie seulement trois valeurs. Et il ne copie que les valeurs de 'repeatArray' à' myArray', alors qu'il doit copier de 'myArray' à' repeatArray'. – Peter

Répondre

1

myArray[i] = repeatArray[i]; est faux. Il doit être repeatArray[i] = myArray[i]; dans la fonction repeatArray.

ok j'ai raté la copie sur une partie deux fois ..

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

Cette copiait sur les valeurs corectly et l'ont venir twicew

+0

merci! maintenant, il imprime seulement les 3 premières valeurs, puis zéro après cela. Ma boucle est-elle incorrecte? –

+0

oui, vous avez seulement assigné les 3 premières valeurs –

+0

comment pourrais-je boucler à nouveau? Je suis super confus sur la façon de copier les valeurs originales à la nouvelle matrice deux fois –

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

Vos impressions programme seulement 3 valeurs, parce que vous n'a pas affecté de valeurs correctes à votre nouveau tableau. Le problème est que vous en boucle à travers la vieille taille, pas la taille * 2.

Vous pourriez y faire face ainsi:

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

Donc je l'ai changé pour boucler la nouvelle taille, et la 4ème valeur est un "3.21143e-322" –

+0

La quatrième valeur est les données de la poubelle parce que votre tableau a une taille de 3. – hoodaticus

+0

les valeurs 5 et 6 sont 1 et 2, ce qui n'est pas la poubelle. Pourquoi est seulement le 4ème? –