C++ Allocation dynamique de tableaux avec exemple
Qu'est-ce qu'un tableau dynamique ?
Un tableau dynamique est assez similaire ร un tableau classique, mais sa taille est modifiable pendant l'exรฉcution du programme. Les รฉlรฉments DynamArray occupent un bloc de mรฉmoire contigu.
Une fois un tableau crรฉรฉ, sa taille ne peut plus รชtre modifiรฉe. Cependant, un tableau dynamique est diffรฉrent. Un tableau dynamique peut augmenter sa taille mรชme aprรจs avoir รฉtรฉ rempli.
Lors de la crรฉation dโun tableau, une quantitรฉ de mรฉmoire prรฉdรฉterminรฉe lui est allouรฉe. Ce n'est pas le cas d'un tableau dynamique car il augmente la taille de sa mรฉmoire d'un certain facteur lorsque cela est nรฉcessaire.
Facteurs ayant un impact sur les performances des tableaux dynamiques
La taille initiale de la baie et son facteur de croissance dรฉterminent ses performances. Notez les points suivants :
- Si une baie a une petite taille et un faible facteur de croissance, elle continuera ร rรฉallouer de la mรฉmoire plus souvent. Cela rรฉduira les performances de la baie.
- Si un tableau a une grande taille et un facteur de croissance important, il aura une รฉnorme quantitรฉ de mรฉmoire inutilisรฉe. Pour cette raison, les opรฉrations de redimensionnement peuvent prendre plus de temps. Cela rรฉduira les performances de la baie.
Le nouveau mot-clรฉ
In C++, nous pouvons crรฉer un tableau dynamique en utilisant le mot-clรฉ new. Le nombre d'รฉlรฉments ร allouer est spรฉcifiรฉ entre crochets. Le nom du type doit prรฉcรฉder cela. Le nombre d'รฉlรฉments demandรฉ sera allouรฉ.
Syntaxe
Le mot-clรฉ new prend la syntaxe suivante :
pointer_variable = new data_type;
La variable pointer_variable est le nom du variable de pointeur.
Le data_type doit รชtre un valide C++ type de donnรฉes.
Le mot-clรฉ renvoie ensuite un pointeur vers le premier รฉlรฉment. Aprรจs avoir crรฉรฉ le tableau dynamique, nous pouvons le supprimer ร l'aide du mot-clรฉ delete.
Exemple 1:
#include<iostream>
using namespace std;
int main() {
int x, n;
cout << "Enter the number of items:" << "\n";
cin >>n;
int *arr = new int[n];
cout << "Enter " << n << " items" << endl;
for (x = 0; x < n; x++) {
cin >> arr[x];
}
cout << "You entered: ";
for (x = 0; x < n; x++) {
cout << arr[x] << " ";
}
return 0;
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte iostream dans notre programme pour utiliser son fonctions.
- Incluez l'espace de noms std dans notre programme afin d'utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de la fonction.
- Dรฉclarez deux variables entiรจres x et n.
- Imprimez du texte sur la console invitant l'utilisateur ร saisir la valeur de la variable n.
- Lisez les entrรฉes de l'utilisateur ร partir du clavier et attribuez-les ร la variable n.
- Dรฉclarez un tableau pour contenir un total de n entiers et attribuez-le ร la variable pointeur *arr.
- Imprime un message invitant l'utilisateur ร saisir n nombre d'รฉlรฉments.
- Utilisez une boucle for pour crรฉer une variable de boucle x pour parcourir les รฉlรฉments saisis par l'utilisateur.
- Lire les รฉlรฉments saisis par l'utilisateur et les stocker dans le tableau arr.
- Fin du corps du pour la boucle.
- Imprimez du texte sur la console.
- Utilisez une boucle for pour crรฉer une variable de boucle x pour parcourir les รฉlรฉments du tableau.
- Imprimez les valeurs contenues dans le tableau nommรฉ arr sur la console.
- Fin du corps de la boucle for.
- Le programme doit renvoyer de la valeur une fois terminรฉ.
- Fin du corps de la fonction main().
REMARQUE : dans l'exemple ci-dessus, l'utilisateur est autorisรฉ ร spรฉcifier n'importe quelle taille pour le tableau pendant l'exรฉcution. Cela signifie que la taille du tableau est dรฉterminรฉe pendant l'exรฉcution.
Initialisation des tableaux allouรฉs dynamiquement
Il est facile d'initialiser un tableau dynamique ร 0.
syntaxe:
int *array{ new int[length]{} };
Dans la syntaxe ci-dessus, la longueur indique le nombre d'รฉlรฉments ร ajouter au tableau. Puisque nous devons initialiser le tableau ร 0, celui-ci doit rester vide.
Nous pouvons initialiser un tableau dynamique ร l'aide d'une liste d'initialisation. Crรฉons un exemple qui dรฉmontre cela.
Exemple 2:
#include <iostream>
using namespace std;
int main(void) {
int x;
int *array{ new int[5]{ 10, 7, 15, 3, 11 } };
cout << "Array elements: " << endl;
for (x = 0; x < 5; x++) {
cout << array[x] << endl;
}
return 0;
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte iostream dans notre programme pour utiliser ses fonctions.
- Incluez l'espace de noms std dans notre programme pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de la fonction.
- Dรฉclarez une variable entiรจre nommรฉe x.
- Dรฉclarez un tableau dynamique nommรฉ array ร l'aide d'une liste d'initialisation. Le tableau contiendra 5 รฉlรฉments entiers. Notez que nous n'avons pas utilisรฉ l'opรฉrateur ยซ = ยป entre la longueur du tableau et la liste d'initialisation.
- Imprimez du texte sur la console. La fin est un C++ mot-clรฉ qui signifie fin de ligne. Il dรฉplace le curseur vers la phrase suivante.
- Utilisez une boucle for pour parcourir les รฉlรฉments du tableau.
- Imprimez le contenu du tableau nommรฉ array sur la console.
- Fin du corps de la boucle for.
- Le programme doit renvoyer de la valeur une fois terminรฉ.
- Fin du corps de la fonction main().
Redimensionner les tableaux
La longueur d'un tableau dynamique est dรฉfinie pendant le temps d'allocation.
Toutefois, C++ n'a pas de mรฉcanisme intรฉgrรฉ pour redimensionner un tableau une fois qu'il a รฉtรฉ allouรฉ.
Vous pouvez cependant surmonter ce dรฉfi en allouant dynamiquement un nouveau tableau, en copiant les รฉlรฉments, puis en effaรงant l'ancien tableau.
Remarque : cette technique est sujette aux erreurs, essayez donc de lโรฉviter.
Suppression dynamique de tableaux
Un tableau dynamique doit รชtre supprimรฉ de la mรฉmoire de l'ordinateur une fois son objectif rempli. L'instruction delete peut vous aider ร y parvenir. L'espace mรฉmoire libรฉrรฉ peut ensuite รชtre utilisรฉ pour contenir un autre ensemble de donnรฉes. Cependant, mรชme si vous ne supprimez pas le tableau dynamique de la mรฉmoire de l'ordinateur, il sera automatiquement supprimรฉ une fois le programme terminรฉ.
Remarque:
Pour supprimer un tableau dynamique de la mรฉmoire de l'ordinateur, vous devez utiliser delete[] au lieu de delete. Le [] demande au processeur de supprimer plusieurs variables plutรดt qu'une seule variable. L'utilisation de delete au lieu de delete[] lorsqu'il s'agit d'un tableau dynamique peut entraรฎner des problรจmes. Des exemples de tels problรจmes incluent les fuites de mรฉmoire, la corruption des donnรฉes, les plantages, etc.
Exemple 3:
#include<iostream>
using namespace std;
int main() {
int x, n;
cout << "How many numbers will you type?" << "\n";
cin >>n;
int *arr = new int[n];
cout << "Enter " << n << " numbers" << endl;
for (x = 0; x < n; x++) {
cin >> arr[x];
}
cout << "You typed: ";
for (x = 0; x < n; x++) {
cout << arr[x] << " ";
}
cout << endl;
delete [] arr;
return 0;
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte iostream dans notre programme afin d'utiliser ses fonctions.
- Incluez l'espace de noms std dans notre programme afin d'utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de la fonction.
- Dรฉclarez deux variables x et n de type de donnรฉes entier.
- Imprimez du texte sur la console. Le texte demandera ร l'utilisateur d'indiquer le nombre de chiffres qu'il saisira.
- Lire les entrรฉes de l'utilisateur ร partir du clavier. La valeur d'entrรฉe sera affectรฉe ร la variable n.
- Dรฉclarez une variable de pointeur *arr. Le tableau arr rรฉservera de la mรฉmoire pour stocker un total de n entiers.
- Imprimez un message sur la console invitant l'utilisateur ร saisir n chiffres.
- Crรฉez une boucle for et la variable de boucle x pour parcourir les nombres saisis par l'utilisateur.
- Lire les nombres saisis par l'utilisateur et les stocker dans le tableau arr.
- Fin du corps de la boucle for.
- Imprimez du texte sur la console.
- Utilisez une boucle for et la variable de boucle x pour parcourir le contenu du tableau arr.
- Imprimez les valeurs du tableau arr sur la console.
- Fin du corps de la boucle for.
- Imprimez une ligne vide sur la console.
- Libรฉrez la mรฉmoire du tableau arr.
- Le programme renverra une valeur une fois terminรฉ avec succรจs.
- Fin du corps de la fonction main().
Rรฉsumรฉ
- Les tableaux rรฉguliers ont une taille fixe. Vous ne pouvez pas modifier leur taille une fois dรฉclarรฉe.
- Avec ces types de tableaux, la taille de la mรฉmoire est dรฉterminรฉe au moment de la compilation.
- Les tableaux dynamiques sont diffรฉrents. Leurs tailles peuvent รชtre modifiรฉes pendant l'exรฉcution.
- Dans les tableaux dynamiques, la taille est dรฉterminรฉe lors de l'exรฉcution.
- Tableaux dynamiques dans C++ sont dรฉclarรฉs ร lโaide du mot-clรฉ new.
- Nous utilisons des crochets pour spรฉcifier le nombre d'รฉlรฉments ร stocker dans le tableau dynamique.
- Une fois terminรฉ avec le tableau, nous pouvons libรฉrer de la mรฉmoire en utilisant l'opรฉrateur delete.
- Utilisez l'opรฉrateur de suppression avec [] pour libรฉrer la mรฉmoire de tous les รฉlรฉments du tableau.
- Une suppression sans [] libรจre la mรฉmoire d'un seul รฉlรฉment.
- Il n'y a pas de mรฉcanisme intรฉgrรฉ pour redimensionner C++ tableaux.
- Pour initialiser un tableau ร l'aide d'un initialiseur de liste, nous n'utilisons pas l'opรฉrateur ยซ = ยป.






