Algoritmos (C++ moderno)
Programación en C++ moderno, le recomendamos que utilice los algoritmos en el Biblioteca de plantillas estándar (STL).Éstos son algunos ejemplos importantes:
for_each, que es el algoritmo de salto de predeterminado.(También transform para la semántica de no en el lugar.)
find_if, que es el algoritmo de búsqueda predeterminado.
sort, lower_boundy el valor predeterminado de algoritmos de búsqueda y ordenación.
Para escribir un comparador, utilice estricta < y denominado lambdas cuando puede.
auto comp = []( const widget& w1, const widget& w2 )
{ return w1.weight() < w2.weight(); }
sort( v.begin(), v.end(), comp );
auto i = lower_bound( v.begin(), v.end(), comp );
Bucles
Cuando sea posible, utilice basados en rango for bucles o algoritmo llamadas o ambos, en lugar de bucles escritas a mano.copy, transform, count_if, remove_if, y otras parecidas, son mucho mejores que los bucles manuscritos porque su intención es obvia y hacen más fácil escribir código libre de errores.Además, muchos algoritmos STL tienen optimizaciones de aplicación que los hacen más eficientes.
En lugar de C++ antiguo como éste:
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Utilizar C++ moderno como este:
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
Basada en intervalo para bucles
Basado en el intervalo de for bucle es un C ++ característica del lenguaje 11, no un algoritmo STL.Pero merece una mención en este debate acerca de los bucles.Basada en intervalo for los bucles son una extensión de la for palabra clave y proporcionar una forma sencilla y eficaz para escribir bucles que recorrer en iteración un intervalo de valores.Están listos para usar para contenedores STL, cadenas y matrices basada en intervalo for bucles.Para habilitar esta nueva sintaxis de iteración para el tipo definido por el usuario, agregue las siguientes compatibilidades:
A begin método que devuelve un iterador para el comienzo de la estructura y una end método que devuelve un iterador para el final de la estructura.
Soporte técnico en el iterador para que estos métodos: operator*, operator!=, y operator++ (versión de prefijo).
Estos métodos pueden ser miembros o funciones independientes.