c++ - rangos - tipos de datos en java
¿La mejor forma de recorrer un rango de enteros? (3)
Esta pregunta ya tiene una respuesta aquí:
Dado que C ++ 11 introdujo el bucle para basado en rango ( basado en rango para en c ++ 11 ), ¿cuál es la mejor manera de expresar el bucle en un rango de enteros?
En lugar de
for (int i=0; i<n; ++i)
Me gustaria escribir algo asi
for (int i : range(0,n))
¿El nuevo estándar soporta algo de ese tipo?
Actualización : este artículo describe cómo implementar un generador de rango en C ++ 11: Generador en C ++
Dependiendo de lo que tenga que hacer con el entero, considere también el encabezado <numeric>
, en particular std::iota junto con std :: transform y std :: fill, según los casos.
La mejor manera es esta:
for (int i=0; i<n; ++i)
Supongo que puedes hacer esto, pero no lo llamaría tan limpio:
#include <iostream>
int main()
{
for ( auto i : { 1,2,3,4,5 } )
{
std::cout<<i<<std::endl;
}
}
Si bien no puede hacerlo con C ++ puro (con las capacidades actuales de la biblioteca estándar de C ++), puede hacerlo con la ayuda de boost:
#include <boost/range/irange.hpp>
#include <iostream>
using namespace boost;
using namespace std;
int main(int argc, char **argv)
{
for(auto i : irange(1, 10))
cout << i << "/n";
return 0;
}
además, Boost.Range
contiene algunos rangos más interesantes que podría encontrar bastante útiles cuando se utiliza con el nuevo bucle for
. Por ejemplo, con Boost.Range puede hacer un ciclo inverso for
.