Bonjour,
Je n'arrive pas a convertir un reverse_iterator vers un iterator. J'ai essayé (++rev).base(), mais ca n'a pas l'air de fonctionner quand ++rev donne rend().
Help me please!!!
Bonjour,
Je n'arrive pas a convertir un reverse_iterator vers un iterator. J'ai essayé (++rev).base(), mais ca n'a pas l'air de fonctionner quand ++rev donne rend().
Help me please!!!
Salut,
Pourquoi ++ ?
Juste rev.base() devrait fonctionner normalement.
MAT.
Non en faite ca fonctionne bien. Mon problème est ailleur (mais je n'arrive pas a trouver le bug, pourtant c'est juste quelque lignes...).
Le ++ c'est parceque de base, rev_ite.base() retourne l'iterateur juste après(dans le sens initial, celui d'un iterateur normale) rev_ite.
Cela convient pour l'insertion (ou t'as besoin de l'itérateur juste apres la position où tu veux insérer) mais pas pour la suppression/modification où là t'as besoin de cette astuce.
Je remonte cette discussion.
Contrairement à ce que dit disturbedID je constate que reverse_iterator==iterator (je veux dire le pointeur implicite qui se trouve derrière). C'est lors du déréférencement d'un reverse_iterator que un "-1" est effectué sur le pointeur implicite.
Ainsi:
rbegin()==end()
begin()==rend()
*rbegin()==*(end()-1)
*rend()==*(begin()-1) soit un crash probable
Ben c'est normal.
rbegin est censé être un itérateur vers le premier élément en partant de la fin, c'est-à-dire le dernier élément.
rend est censé être un itérateur au-delà de la fin, et le déréférencer est un comportement indéfini.
Il semble que l'usage de reverse_iterator::base() soit délicat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 reverse_iterator rit=vector.rbegin(); iterator it=rit.base(); valueref=*it;//crash !
Partager