a- Pas tout-à-fait. Un itérateur
peut être un pointeur, mais il s'agit généralement d'un objet dédié au parcours d'une structure de données et qui peut prendre n'importe quelle forme. Comme en plus il est généralement spécifique à cette structure, il est souvent défini comme sous-classe de celle qui la définit et la gère. Par exemple :
string et
string::iterator.
Si un itérateur ressemble à un pointeur, c'est parce qu'il est fait pour se comporter de la même façon, pour lui être même éventuellement substitué. Par contre, la seule chose qui est exigible d'un objet itérable est d'être parcouru de façon séquentielle. Les « accès aléatoires » sont facultatifs ici. En conséquence, les seules choses qui sont demandées à un objet pour être considéré comme itérable sont :
b- Du côté de l'itérateur : [...]
- De pouvoir être incrémenté (par post-incrémentation). Au besoin en réimplémentant operator ++ ()
c- Par contre, il n'est pas demandé à un itérateur de pouvoir revenir en arrière, ni de sauter plusieurs éléments en une opération, ni de pouvoir être indexé avec
[
] (rien ne t'empêche de l'implémenter quand même au besoin et si c'est possible).
En ce sens, tout ceci est déjà automatique nativement avec des pointeurs ordinaires (quand on peut y avoir recours, c'est-à-dire quand toutes les données sont chargées consécutivement en mémoire)..
Partager