Partager via


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; }  );

Hh438471.collapse_all(fr-fr,VS.110).gifEn 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)

Guide de référence du langage C++

Référence de la bibliothèque C++ standard