35 votes

Quand faut-il utiliser les algorithmes STL au lieu d'utiliser les vôtres?

J'utilise fréquemment les conteneurs STL, mais n'ont jamais utilisé les algorithmes de la STL pour être utilisé avec les conteneurs STL.

Un avantage de l'utilisation de la STL algorithmes est qu'ils fournissent une méthode pour éliminer les boucles de sorte que le code de la logique de la complexité est réduite. Il y a d'autres avantages que je ne vais pas faire la liste ici.

Je n'ai jamais vu de code C++ qui utilise les algorithmes de la STL. À partir de l'exemple de code dans la page web d'articles à des projets open source, je n'ai pas vu de leur utilisation.

Sont-ils utilisés plus fréquemment qu'il ne le paraît?

75voto

David Points 3766

Réponse courte: Toujours.

Réponse longue: Toujours. C'est ce qu'ils sont là. Ils sont optimisés pour une utilisation avec des conteneurs STL, et ils sont plus rapides, plus claire et plus idiomatique que tout ce que vous pouvez écrire vous-même. La situation que vous devriez envisager de déployer votre propre, si vous pouvez articuler de façon très spécifique, la mission-critique nécessaire que les algorithmes de la STL ne peut pas satisfaire.

Edité pour ajouter: (Ok, pas vraiment vraiment toujours, mais si vous devez vous demander si vous devez utiliser la STL, la réponse est "oui".)

18voto

Jerry Coffin Points 237758

Vous avez obtenu un certain nombre de réponses déjà, mais je ne peux pas vraiment d'accord avec l'un d'eux. Quelques-uns viennent assez proche de la marque, mais ne parviennent pas à mentionner le point crucial (OMI, bien sûr).

Au moins pour moi, le point crucial est assez simple: vous devez utiliser les algorithmes standards lorsqu'ils aident à clarifier le code que vous écrivez.

C'est vraiment aussi simple que cela. Dans certains cas, ce que vous faites exigerait une arcane invocation à l'aide de std::bind1st et std::mem_fun_ref (ou quelque chose dans cet ordre) qui est extrêmement dense et opaque, où un for boucle serait presque trivialement simple et directe. Dans ce cas, aller de l'avant et à l'utilisation de l' for boucle.

Si il n'y a pas d'algorithme standard qui fait ce que vous voulez, prenez un peu de soin et de regarder à nouveau -- vous aurez souvent à côté de quelque chose qui va vraiment faire ce que vous voulez (un endroit qui est souvent oubliée: les algorithmes en <numeric> sont souvent utiles pour les non-numérique utilise). Ayant regardé une couple de fois, et a confirmé qu'il n'y a vraiment pas un algorithme standard de faire ce que vous voulez, au lieu d'écrire que for boucle (ou autre) en ligne, envisager d'écrire un algorithme générique pour faire ce que vous devez faire. Si vous utilisez un seul endroit, il ya une assez bonne chance que vous pouvez l'utiliser de deux ou trois de plus, à quel point il peut être une grande victoire dans la clarté.

L'écriture des algorithmes génériques n'est pas difficile, en fait, il est souvent presque pas de travail supplémentaire par rapport à l'écriture d'une boucle à la volée, de sorte que même si vous ne pouvez l'utiliser que deux fois, vous êtes déjà d'économiser un peu de travail, même si vous ignorez l'amélioration dans le code de la lisibilité et de la clarté.

15voto

cHao Points 42294

Les algorithmes STL doivent être utilisés chaque fois qu'ils correspondent à ce que vous devez faire. C'est presque tout le temps.

14voto

SigTerm Points 16055

Quand les algorithmes de la STL être utilisé au lieu d'utiliser votre propre?

Lorsque vous la valeur de votre temps et de votre santé mentale et d'avoir plus de choses amusantes à faire que de réinventer la roue, encore et encore.

Vous devez utiliser vos propres algorithmes lorsque le projet l'exige, et il n'y a pas de solutions de remplacement acceptables pour écrire vous-même, ou si vous vous êtes identifié STL algorithme comme un goulot d'étranglement (à l'aide du générateur de profils, bien sûr), ou avoir une sorte de restrictions de la STL ne sont pas conformes, ou d'adapter STL pour la tâche va prendre plus de temps que d'écrire un algorithme à partir de zéro (j'ai dû utiliser tordu version binaire de recherche à quelques reprises...). STL n'est pas parfait et n'est pas apte pour tout, mais quand vous pouvez, vous devez l'utiliser. Quand quelqu'un l'a déjà fait tout le travail pour vous, il n'y a souvent aucune raison de faire la même chose à nouveau.

8voto

wheaties Points 20917

J'écris des applications critiques pour les performances. Ce sont des choses qui nécessitent de traiter des millions d'informations le plus rapidement possible. Je ne serais pas en mesure de faire certaines des choses que je fais maintenant sans la STL. Utilisez-les toujours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X