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