Necesito iterar sobre un vector desde el final hasta el principio. La forma "correcta" esIteración sobre un vector en dirección inversa
for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
//do Something
}
Cuando doSomething implica conocer el índice real, entonces algunos cálculos se deben hacer con rit para obtenerlo, como index = v.size() - 1 - (rit - v.rbegin)
Si se necesita el índice de todos modos, entonces fuertemente cree que es mejor para iterar usando ese índice
for(int i = v.size() - 1; i >= 0; --i)
{
//do something with v[i] and i;
}
Esto da una advertencia de que está firmado y i
v.size()
no tiene signo. Cambiar a
for(unsigned i = v.size() - 1; i >= 0; --i)
es sólo funcionalmente mal, porque este es esencialmente un bucle sin fin :)
¿Qué es un estéticamente buena manera de hacer lo que quiero hacer, que
- está advirtiendo de libre
- no implica arroja
- no es excesivamente prolijo
espero no estoy buscando algo que no existe :)
condición de bucle 'i! = Std :: numeric_limits :: max()' ... o usa UINT_MAX si crees que es verboso. –
smerlin
Hasta ahora, creo que hacer un reparto se ve como la solución más limpia :-) –
en realidad estoy de acuerdo con David – smerlin