Qu'est-ce qu'une matrice dynamique?
Un tableau dynamique est assez similaire à un tableau normal, mais sa taille est modifiable pendant l'exécution du programme. Les éléments DynamArray occupent un bloc de mémoire contigu.
Une fois qu'un tableau a été créé, sa taille ne peut pas ê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, il se voit allouer une quantité prédéterminée de mémoire. Ce n'est pas le cas avec un tableau dynamique car il augmente la taille de sa mémoire d'un certain facteur en cas de besoin.
Dans ce didacticiel C ++, vous apprendrez
- Qu'est-ce qu'une matrice dynamique?
- Facteurs ayant une incidence sur les performances des baies dynamiques
- Le nouveau mot-clé
- Initialisation de tableaux alloués dynamiquement
- Redimensionner les tableaux
- Suppression dynamique de tableaux
Facteurs ayant une incidence sur les performances des baies dynamiques
La taille initiale de la baie et son facteur de croissance déterminent ses performances. Notez les points suivants:
- Si un tableau a une petite taille et un petit facteur de croissance, il 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é
En C ++, nous pouvons créer un tableau dynamique à l'aide du mot clé new. Le nombre d'éléments à allouer est spécifié entre crochets. Le nom du type doit précéder ceci. Le nombre d'articles demandé sera attribué.
Syntaxe:
Le nouveau mot-clé utilise la syntaxe suivante:
pointer_variable = new data_type;
La variable pointer_variable est le nom de la variable pointeur.
Le data_type doit être un type de données C ++ valide.
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:
#includeusing 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;}
Production:
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 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 à entrer la valeur de la variable n.
- Lisez l'entrée utilisateur à partir du clavier et affectez-la à la variable n.
- Déclarez un tableau contenant un total de n entiers et affectez-le à la variable de pointeur * arr.
- Imprimez 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 de la boucle for.
- 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 une 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 de 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, cela devrait être laissé vide.
Nous pouvons initialiser un tableau dynamique à l'aide d'une liste d'initialiseurs. Créons un exemple qui le démontre.
Exemple 2:
#includeusing 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;}
Production:
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'initialiseurs. 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. Le endl est un mot clé C ++ qui signifie la ligne de fin. Il déplace le curseur sur 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 une 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.
Cependant, C ++ n'a pas de mécanisme intégré de redimensionnement d'un tableau une fois qu'il a été alloué.
Vous pouvez cependant surmonter ce défi en allouant un nouveau tableau de manière dynamique, en copiant les éléments, puis en effaçant l'ancien tableau.
Remarque: cette technique est sujette à des erreurs, par conséquent, essayez de l'éviter.
Suppression dynamique de tableaux
Un tableau dynamique doit être supprimé de la mémoire de l'ordinateur une fois son objectif atteint. L'instruction de suppression peut vous aider à accomplir cela. 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é.
Noter:
Pour supprimer un tableau dynamique de la mémoire de l'ordinateur, vous devez utiliser delete [] au lieu de delete. Le [] demande au CPU de supprimer plusieurs variables plutôt qu'une seule. L'utilisation de delete au lieu de delete [] lors du traitement d'un tableau dynamique peut entraîner des problèmes. Des exemples de tels problèmes incluent les fuites de mémoire, la corruption de données, les plantages, etc.
Exemple 3:
#includeusing 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;}
Production:
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 du type de données entier.
- Imprimez du texte sur la console. Le texte demandera à l'utilisateur d'indiquer le nombre de chiffres qu'il entrera.
- Lisez les entrées 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 à entrer n nombres.
- Créez une boucle for et la variable de boucle x pour parcourir les nombres entrés par l'utilisateur.
- Lisez les nombres saisis par l'utilisateur et stockez-les 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 de la matrice arr.
- Le programme renverra une valeur lorsqu'il se terminera 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 lors 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.
- Les tableaux dynamiques en 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 le tableau terminé, nous pouvons libérer de la mémoire à l'aide de l'opérateur de suppression.
- 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 les tableaux C ++.
- Pour initialiser un tableau à l'aide d'un initialiseur de liste, nous n'utilisons pas l'opérateur .