Exercice : Mise en place#
Dans ce TP, vous allez progressivement définir – dans un fichier
vecteur.cpp – une structure de données pour des tableaux dynamiques
d’entiers, ainsi que les fonctions permettant de les utiliser.
Dans ce premier exercice, vous implémenterez les éléments de base
nécessaires à la création, l’affichage et la libération d’un
tableau. Vous n’aurez pas encore tous les éléments requis pour écrire
des tests, mais, vous ferez à chaque étape une première vérification
de votre code en compilant le fichier vecteur.cpp.
- Définissez la structure de données nécessaire à la gestion d’un tableau dynamique. - BEGIN SOLUTION - struct vecteur { int *data; // pointeur vers les éléments du tableau int count; // nombre d'éléments présents dans le tableau int size; // place mémoire réservée pour le tableau // (exprimée en nb d'éléments) }; - END SOLUTION 
- Définissez une fonction permettant de créer un tableau dynamique vide. Attention de bien initialiser tout ce qui doit l’être. - vecteur *creer_vecteur(); - BEGIN SOLUTION - On choisit ici la solution simple qui consiste à ne pas pré-allouer le tableau. Une autre solution serait d’allouer dès la création un petit tableau par exemple de 8 éléments. - vecteur *creer_vecteur() { vecteur *v = (vecteur *)malloc(sizeof(vecteur)); v->data = NULL; v->count = 0; v->size = 0; return v; } - END SOLUTION 
- Définissez une fonction qui affiche simplement un tableau dynamique. Cette fonction vous sera particulièrement utile pour les tests de vos fonctions ensuite. - void afficher_vecteur(vecteur *v); - BEGIN SOLUTION - void afficher_vecteur(vecteur *v) { for (int i = 0; i < v->count; i++) { std::cout << v->data[i] << " "; } std::cout << std::endl; } - END SOLUTION 
- Afin de gérer correctement la mémoire, définissez une fonction pour libérer la mémoire occupée par un tableau. - void liberer_vecteur(vecteur *v); - BEGIN SOLUTION - Le test n’est ici pas vraiment nécessaire puisque la fonction free ne fait rien si on lui donne un pointeur NULL. Il permet toutefois d’exprimmer le fait que data peut-être NULL et que ce cas est géré correctement. - void liberer_vecteur(vecteur *v) { if (v->data != NULL) { free(v->data); } free(v); } - END SOLUTION