
 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