Algorithmes (C++ moderne)
Pour la programmation C++ moderne, nous vous conseillons d'utiliser les algorithmes dans la Standard Template Library (STL).Voici quelques exemples importants :
for_each, qui est l'algorithme de parcours par défaut.(Également transform pour la sémantique n'est pas en place.)
find_if, qui est l'algorithme de recherche par défaut.
sort, lower_boundet le défaut de tri et les algorithmes de recherche.
Pour écrire un comparateur, utilisez strict < et utiliser nommé lambda lorsque vous le pouvez.
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 );
Boucles
Dans la mesure du possible, utilisez basée sur une plage for boucles ou algorithme appels ou les deux, au lieu de boucles écrites à la main.copy, transform, count_if, remove_if, et d'autres comme leur sont beaucoup mieux que boucles manuscrits car leur but est évidente et qu'ils rendent plus facile à écrire du code exempt de bogue.En outre, de nombreux algorithmes STL ont optimisations d'implémentation qui les rendent plus efficace.
À la place des anciens C++ comme ceci :
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Utiliser C++ modernes comme suit :
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
En fonction de plage pour les boucles
Basée sur la plage for boucle est un C ++ fonctionnalité de langage 11, pas un algorithme STL.Mais il mérite une mention dans cette discussion sur les boucles.Basé sur une plage for boucles sont une extension de la for mot-clé et offrent un moyen pratique et efficace pour écrire des boucles itérer sur une plage de valeurs.Conteneurs STL, les chaînes et les tableaux sont prêts à l'emploi pour basé sur la plage for boucles.Pour activer cette nouvelle syntaxe d'itération pour votre type défini par l'utilisateur, ajoutez la prise en charge suivant :
A begin méthode qui retourne un itérateur vers le début de la structure et une end méthode qui retourne un itérateur pour la fin de la structure.
Prise en charge dans l'itérateur pour ces méthodes : operator*, operator!=, et operator++ (version de préfixe).
Ces méthodes peuvent être membres ou fonctions autonomes.
Voir aussi
Autres ressources
Accueil vers C++ (C++ moderne)