Cela semble être comme il devrait avoir une solution super facile, mais je ne peux tout simplement pas comprendre. Je crée simplement un tableau redimensionné et essaye de copier toutes les valeurs d'origine, puis supprimez enfin l'ancien tableau pour libérer la mémoire.
void ResizeArray(int *orig, int size) { int *resized = new int[size * 2]; for (int i = 0; i < size; i ++) resized[i] = orig[i]; delete [] orig; orig = resized; }
3 Réponses :
N'oubliez pas que les paramètres en C ++ sont passés par la valeur. Vous attribuez Vous devez utiliser une double indirection ( ou un "double pointeur", c'est-à-dire un pointeur à un pointeur sur ou une référence au pointeur: p> d'ailleurs, pour les tailles de tableau, vous devez utiliser le type redimensionné code> à un copier em> du pointeur qui vous a été transmis, le pointeur en dehors de la fonction reste identique.
int code>): p>
std :: Taille_t code> à partir de
+1 L'autre option consiste à renvoyer la nouvelle matrice en utilisant ... la valeur de retour.
@ Andrécaron: C'est une option aussi, mais je pense que ces formes conviennent mieux à l'utilisation en retrait.
En tant que point de clarification, par «double pointeur», le répondant signifie «double indirection». Quand je l'ai lu d'abord, j'ai été confus pourquoi il voulait remplacer double * code> pour
int * code>.
Orig code> doit être un pointeur sur un pointeur pour l'affecter à
redimensionné code>:
Je suggère fortement de remplacer les tableaux avec std :: vecteur
Alors que vecteurs code> en général sont quelque chose d'intéressant, il existe également une variété de raisons contre eux. Ainsi, votre réponse est basée sur l'opinion et plutôt un commentaire qu'une réponse réelle au problème de l'OP.
@Markus: On pourrait dire la même chose à propos des tableaux. Il existe également une variété de raisons contre eux, donc la question de l'OP est une opinion fondée sur l'opinion et devrait être fermée (et peut-être supprimée).
Notez qu'il n'y a pas de "valeurs de copie par référence". Soit vous créez une nouvelle référence aux mêmes données ou à copier.
Même si vous ne voulez pas utiliser
std :: vecteur code>, vous gagneriez beaucoup en enveloppant cela dans une classe afin que les clients puissent passer autour d'un objet invariant et ne pas avoir à gérer le fait que la Le pointeur de mise en œuvre change avec chaque redimensionnement. : - /