Exercice 79
Énoncé
Modifier la classe set_int précédente (implémentée sous la forme d’une liste chaînée,
avec ou sans son constructeur par recopie) pour qu’elle dispose de ce que l’on
nomme un « itérateur » sur les différents éléments de l’ensemble. Rappelons qu’il
s’agit d’un mécanisme permettant d’accéder séquentiellement aux différents éléments
de l’ensemble. On prévoira trois nouvelles fonctions membre : init, pour initialiser
le processus d’itérationþ; prochain, pour fournir l’élément suivant lorsqu’il existe et
existe, pour tester s’il existe encore un élément non exploré.
On complétera alors le programme d’utilisation précédent (en fait, celui de
l’exercice 26), de manière qu’il affiche les différents entiers contenus dans les
valeurs fournies en donnée.
N.B. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, qu’il ne faut pas chercher à utiliser ici.
D’autre part, cet exercice sera plus profitable s’il est traité après l’exercice du
chapitre 3 qui proposait l’introduction d’un tel itérateur dans une classe représentant
des ensembles de caractères (mais dont l’implémentation était différente de
l’actuelle classe).
Ici, la gestion du mécanisme d’itération nécessite l’emploi d’un pointeur (que nous
nommerons courant) sur un nœud de notre liste. Nous conviendrons qu’il pointe sur le
premier élément non encore traité dans l’itération, c’est-à-dire dont la valeur
correspondante n’a pas encore été renvoyée par la fonction prochain. Il n’est pas utile,
ici, de prévoir un membre donnée pour indiquer si la fin de liste a été atteinte ; en effet,
avec la convention adoptée, il nous suffit de tester la valeur de courant (qui sera égale à
NULL, lorsque l’on sera en fin de liste).
Le rôle de la fonction init se limite à l’initialisation de courant à la valeur du pointeur
sur le début de la liste (debut).
La fonction suivant fournira en retour la valeur entière associée au nœud pointé par
courant lorsqu’il existe (courant différent de NULL) ou la valeur 0 dans le cas contraire (il
s’agit, là encore, d’une convention destinée à protéger l’utilisateur ayant appelé cette
fonction alors que la fin de liste était déjà atteinte et, donc, qu’aucun élément de
180
Énoncé
Modifier la classe set_int précédente (implémentée sous la forme d’une liste chaînée,
avec ou sans son constructeur par recopie) pour qu’elle dispose de ce que l’on
nomme un « itérateur » sur les différents éléments de l’ensemble. Rappelons qu’il
s’agit d’un mécanisme permettant d’accéder séquentiellement aux différents éléments
de l’ensemble. On prévoira trois nouvelles fonctions membre : init, pour initialiser
le processus d’itérationþ; prochain, pour fournir l’élément suivant lorsqu’il existe et
existe, pour tester s’il existe encore un élément non exploré.
On complétera alors le programme d’utilisation précédent (en fait, celui de
l’exercice 26), de manière qu’il affiche les différents entiers contenus dans les
valeurs fournies en donnée.
N.B. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, qu’il ne faut pas chercher à utiliser ici.
D’autre part, cet exercice sera plus profitable s’il est traité après l’exercice du
chapitre 3 qui proposait l’introduction d’un tel itérateur dans une classe représentant
des ensembles de caractères (mais dont l’implémentation était différente de
l’actuelle classe).
Ici, la gestion du mécanisme d’itération nécessite l’emploi d’un pointeur (que nous
nommerons courant) sur un nœud de notre liste. Nous conviendrons qu’il pointe sur le
premier élément non encore traité dans l’itération, c’est-à-dire dont la valeur
correspondante n’a pas encore été renvoyée par la fonction prochain. Il n’est pas utile,
ici, de prévoir un membre donnée pour indiquer si la fin de liste a été atteinte ; en effet,
avec la convention adoptée, il nous suffit de tester la valeur de courant (qui sera égale à
NULL, lorsque l’on sera en fin de liste).
Le rôle de la fonction init se limite à l’initialisation de courant à la valeur du pointeur
sur le début de la liste (debut).
La fonction suivant fournira en retour la valeur entière associée au nœud pointé par
courant lorsqu’il existe (courant différent de NULL) ou la valeur 0 dans le cas contraire (il
s’agit, là encore, d’une convention destinée à protéger l’utilisateur ayant appelé cette
fonction alors que la fin de liste était déjà atteinte et, donc, qu’aucun élément de
180
