6.4.5 Parcourir une std::list ou un std::vector à l'envers : le reverse_iterator

Pourquoi on utilise pas l'opérateur -- sur un itérateur normal ?

C'est que ça entraîne des complications...

En effet, l'itérateur renvoyé par end() n'est pas un élément de la liste, donc vous ne pouvez pas commencer par lui. Il va donc falloir que vous fassiez une condition sur la taille de la liste pour savoir si vous avez le droit d'appeler --, et vous ne devez pas vous arrêter à begin() car c'est bien un élément de la liste, mais il n'a pas d'élément précédent...

Bon, arrêtons le massacre et utilisez un reverse_iterator si vous voulez parcourir votre liste à l'envers.

Le système est le même que pour les itérateurs normaux, sauf que le début est donné par la fonction rbegin() et la fin est donnée pas rend().

Voici un exemple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <list>

using namespace std;

int main(int argc, char** argv){
	list<int> listeEntiers;
	listeEntiers.push_back(1);
	listeEntiers.push_back(2);
	listeEntiers.push_back(3);
	listeEntiers.push_back(4);
	
	for(list<int>::reverse_iterator it = listeEntiers.rbegin(); it != listeEntiers.rend(); it++){
		cout << *it << endl;
	}
	return 0;
}

Il faut bien appeler ++ sur le reverse_iterator pour qu'il recule!!!

On compile :

g++ -Wall main.cpp -o test

On peut afficher la list :

./test 
4
3
2
1

Et voilà le travail.