M1103 Mini-feuille 1

Avant de commencer : activez C++14

Exercice 1 — Utilisation de vecteurs

La documentation officielle est un des rares endroits qui contiennent des informations définitives sur (presque) tous les aspects du langage C++. Cette documentation officielle est préférable à de nombreux tutoriels que l’on trouve sur internet et qui souvent ne sont pas à jour pour les nouvelles versions de C++.

Dans cet exercice nous allons expérimenter avec l’utilisation de la classe vector de C++. Il sera utile de lire la documentation officielle de la classe vector. Elle vous servira comme référence future.

Regardez en particulier les documentations des fonctions

qui seront utilisées dans cet exercice.

Téléchargez le fichier code.zip et ajoutez son contenu (les fichiers vectors.cpp, vectors.h, test.cpp, asserts.h) à un nouveau projet Code::Blocks.

a — Vecteur des \(n\) premiers entiers positifs

On peut créer un vecteur vec d’entiers vide avec l’instruction vector<int> vec. Bien qu’on puisse créer un vecteur avec les éléments \(0,1,2,3\) en écrivant vector<int> vec = {0,1,2,3}, ceci ne suffit pas pour créer un vecteur avec un nombre d’éléments non constant. Il faudra donc créer un vecteur vide, puis rajouter des éléments dans une boucle.

Compléter la fonction range dans le fichier vectors.cpp. Cette fonction prend en paramètre un entier \(n\) et renvoie un vecteur dont les éléments sont \(0,1,2,\dots,(n-1)\), c’est-à-dire les \(n\) premiers entiers positifs en ordre croissant. Si le paramètre \(n\) est inférieur à \(0\), alors la fonction range renvoie un vecteur d’entiers vide.

Vous pouvez tester votre fonction en lançant le programme dont la fonction main est définie dans le fichier test.cpp.

b — Retourner le premier élément d’un vecteur

Astuce : bien regarder le comportement de la fonction at de la classe vector en cas d’indice hors bornes.

Compléter la fonction firstElement dans le fichier vectors.cpp. Cette fonction prend en paramètre (une référence constante à) un vecteur d’entiers et renvoie son premier élément. Si le vecteur n’a pas de premier élément (parce qu’il est vide), la fonction doit lancer une exception.

Vous pouvez tester votre fonction en lançant le programme dont la fonction main est définie dans le fichier test.cpp.

c — Supprimer le premier élément impair

Veiller à bien sortir de la fonction (ou au moins terminer la boucle) dès que l’on trouve le premier élément impair. En général, il n’est pas une bonne idée de continuer à boucler sur les éléments d’un vecteur quand il change.

Noter que la fonction erase ne prend pas un int en paramètre pour dénoter l’élément à supprimer mais une position qui peut être spécifiée relative au début du vecteur. Pour supprimer le \(i\)ème élément du vecteur vec on utilise donc l’instruction vec.erase(vec.begin() + i).

Compléter la fonction deleteFirstOdd dans le fichier vectors.cpp. Cette fonction prend en paramètre (une référence à) un vecteur d’entiers et supprime son premier élément impair, s’il en existe un. Sinon, le vecteur doit rester inchangé.

Vous pouvez tester votre fonction en lançant le programme dont la fonction main est définie dans le fichier test.cpp.

retour au site web du cours