C++ - TD 1 | NFI Orsay - année 1996-97
|
Objectifs: Prendre contact avec les classes C++, un ensemble de
classes qui coopèrent, avec l'implémentation en C++ des structures
fondamentales (liste, itérateur).
Exercice 1
Implémentez la liste d'entiers dont l'interface est la suivante:
class int_list [...] {
public:
int_list();
void append(int);
[...]
};
ostream &operator<<(ostream &, const int_list &);
NB: La méthode append
ajoute en fin de liste et doit être
efficace en temps de calcul.
Exercice 2
On qualifie généralement une classe dont le rôle est de contenir des
objets (comme la liste), de classe container. A une telle
classe sont associés des méthodes d'accès appelées itérateur.
Voici une utilisation possible d'un itérateur:
int_list l;
l.append(1);
l.append(2);
for(iterator i(l); !i.atEnd(); i++)
cout << i() << endl;
Ecrivez la classe iterator
.
Exercice 3
Il est généralement intéressant de pouvoir ajouter un élément
n'importe où dans la liste. Modifiez l'itérateur dans ce sens. Quelle
devrait alors être l'interface de la classe int_list
?
Exercice 4
Modifiez l'itérateur pour pouvoir supprimer un élément de la
liste. En utilisant cet itérateur, écrivez la fonction suivante:
// Cette fonction supprime toutes les occurrences de value dans la liste
void remove_all(int_list &, int value)
{
[...]
}
Exercice 5
Supposons qu'on veuille afficher une liste constante avec l'itérateur,
que se produirait-il ? Comment éviter ce phénomène ?
Exercice 6
On a généralement besoin d'une liste à laquelle on peut ajouter des
éléments. En supposant qu'il n'y ait pas de méthode
append
dans la classe int_list
, comment
écrire une classe qui permette d'ajouter en utilisant les classes déjà
existantes ?
Exercice 7
Réécrivez toutes les classes pour avoir une liste générique
(template).
Christophe Tronche, ch@tronche.com