1. Quelques éléments nouveaux en C++
Pour chaque ligne du programme suivant, décrivez les éléments qui diffèrent de ce que vous connaissez en C. Justifiez chacune des différences. Essayez d'imaginer, en donnant un exemple, une situation où ces nouveautés pourraient être intéressantes.
#include <iostream> #include <string> // ceci est une fonction qui additionne deux entiers void addition(int a, int b, int & c) { c=a+b; } // ceci est une fonction qui additionne deux flottants void addition(float a, float b, float & c) { c=a+b; } int main(int argc, char** argv) { for(int i=0; i<10; ++i) { int x1; addition(i,i,x1); std::cout << "x1 : " << x1 << "n"; float x2; addition(i,i,x2); std::cout << "x2 : " << x2 << "n"; } std::string nom; std::cout << "Entrez votre nom : "; std::cin >> nom; std::cout << "Bonjour " << nom << "n"; }
2. Tableau de chaînes de caractères
En tenant compte de l'exercice précédent, écrivez un programme permettant de saisir des chaînes de caractères (std::string) et de les ranger dans un tableau. La saisie finira lorsque l'utilisateur tape le mot fin. On utilisera pour cela les instructions suivantes, dans laquelle saisie est de type std::string :
if(saisie=="fin") { // fini }
-
Quelle nouveauté du C++ est utilisée dans les instructions :
if(saisie=="fin") { // fini }
-
Quels problèmes pose la gestion du tableau?
-
Écrivez une fonction qui affiche le contenu du tableau.
-
Modifiez le programme précédent en allouant dynamiquement le tableau (utilisez l'opérateur
new). -
Écrivez une fonction (dont le prototype est
std::string* redimensionner(string* tableau, int ancienneTaille, int nouvelleTaille)) qui permet de redimensioner le tableau. Cette fonction devra copier les valeurs de l'ancien tableau dans un nouveau tableau. Elle devra aussi détruire l'ancien tableau.
3. Tableau dynamique de chaînes
En pratique, nous n'écrirons pas ce genre de choses : le C++ propose la classe vector qui permet de gérer des tableaux de taille variable. Comme cout, cin et string, la classe vector fait partie de la bibliothèque standard du C++. Comme beaucoup de classes de cette bibliothèque, elle a la particularité d'être paramétrée par le type des données qu'elle contient. On pourra donc créer des tableaux dynamiques d'entiers, de flottants, de chaînes, etc. Voici un exemple d'utilisation pour un tableau de chaînes :
// crée initialement avec 3 elements std::vector<std::string> tableau(3); tableau[0]="Bonjour"; tableau[1]="Au revoir"; tableau[2]="Toto";
La classe vector possède (entre autres) les fonctions membres suivantes :
-
push_back(valeur)permettant d'insérer une valeur à la fin du tableau; -
size(), qui renvoie le nombre d'éléments dans le tableau.
En utilisant ces fonctions membres, refaites l'exercice de la section précédente.
4. Tri de chaînes de caractères
Les objets de type string peuvent être comparés alphabétiquement tout simplement avec l'opérateur <, comme pour les entiers. Écrivez un programme permettant de trier un tableau dynamique de chaîne de caractères (std::vector<std::string>), en utilisant un tri par extraction du minimum.