
Envoyé par
nikko34
Rien n'indique que iterator et reverse_iterator se doivent d'être du même type,
Tout indique qu'ils ne peuvent pas être du même type!

Envoyé par
nikko34
.base() te renvoie l'iterator correspondant à ton reverse_iterator.
base() renvoie l'itérateur stocké par le reverse_iterator, celui qui a été passé en argument au constructeur :
reverse_iterator<I>(i).base() = i
base() ne renvoie pas un itérateur correspondant dans le sens où tu l'entends : pointant sur le même objet.

Envoyé par
nikko34
1 2
|
v.erase( v.rbegin().base() ); |
Non surtout pas! Par définition :
v.rbegin() = V::reverse_iterator(v.end())
où V est le type de v, donc
v.rbegin().base() = v.end()
Par définition, v.end() ne pointe pas sur un élément, et donc v.erase(v.rbegin().base()) a un comportement indéfini.
Pour le principe de fonctionnement de reverse_iterator et la relation entre *r et r.base(), je te conseille de lire une doc sur la STL.
Pour un exemple de code utilisant les propriétés de reverse_iterator et notamment base(), regarde mon message #4.
Partager