Das gut etablierte "Muster" für die Rückwärtsiteration durch geschlossen-offene Bereiche sieht wie folgt aus
// Iterate over [begin, end) range in reverse
for (iterator = end; iterator-- != begin; ) {
// Process `*iterator`
}
oder, wenn Sie es vorziehen,
// Iterate over [begin, end) range in reverse
for (iterator = end; iterator != begin; ) {
--iterator;
// Process `*iterator`
}
Dieses Muster ist beispielsweise nützlich, um ein Array mithilfe eines vorzeichenlosen Index rückwärts zu indizieren
int array[N];
...
// Iterate over [0, N) range in reverse
for (unsigned i = N; i-- != 0; ) {
array[i]; // <- process it
}
(Personen, die mit diesem Muster nicht vertraut sind, bestehen häufig darauf, vorzeichenbehaftete Ganzzahltypen für die Array-Indizierung zu verwenden, da sie fälschlicherweise glauben, dass vorzeichenlose Typen für die umgekehrte Indizierung irgendwie "unbrauchbar" sind.)
Es kann zum Iterieren über ein Array unter Verwendung einer "Gleitzeiger" -Technik verwendet werden
// Iterate over [array, array + N) range in reverse
for (int *p = array + N; p-- != array; ) {
*p; // <- process it
}
oder es kann für die umgekehrte Iteration über einen Vektor unter Verwendung eines gewöhnlichen (nicht umgekehrten) Iterators verwendet werden
for (vector<my_class>::iterator i = my_vector.end(); i-- != my_vector.begin(); ) {
*i; // <- process it
}