36 votes

Bibliothèque standard C ++ - Quand dois-je l’utiliser et quand je ne devrais pas le faire?

Je me demandais comment souvent, les gens utilisent effectivement une grande partie de la bibliothèque c++ standard, en particulier les trucs dans l' <algorithm> et <numeric> - têtes. Le texte des livres semblent recommander, mais je n'ai pas vu l'un d'eux utilisée dans divers projets que j'ai passé au crible (coïncidence?) et personnellement, cela me semble plus facile de l'écrire appropriée simple des algorithmes de moi-même à chaque fois plutôt que de mémoriser ou de consulter une référence à ces en-têtes à chaque fois. Suis tout juste d'être paresseux ou têtu? Est-il réellement des gains de performances, etc lors de l'utilisation de ces bibliothèques?

Merci,

R

45voto

John Dibling Points 56814

Il est possible que vous êtes paresseux ou têtu. Personnellement, je les utilise tout le temps dans le code de production.

Je ne fais pas cela pour être de fantaisie, et je ne fais pas cela parce que j'aime l'écriture de "l'ère de l'espace code." Plutôt, je le fais parce que je suis un paranoïaque programmeur, et je sais que les environnements de production sont hostiles lieux, qui mutilent code et de réduire mes programmes à fumer des tas de rien octets, si on leur donne une chance.

Je le fais parce que je vis par la devise "Le meilleur code, le code que vous écrivez jamais." Il faut du temps pour apprendre à utiliser la STL & Std Lib efficacement, mais une fois que vous ne vous trouverez qu'il peut être utilisé de sorte que ce qui est maintenant de 1000 lignes de code devient peut-être de 100. Ces 100 peut prendre autant de temps pour écrire que l'original 1000, mais il y a moins de points de défaillance. Le code peut être plus robuste, si vous vous tenez sur les épaules des autres.

8voto

Cratylus Points 21838

Vous devez utiliser stl autant que possible.
Il a été écrit par des programmeurs assez sophistiqués et il est très peu probable que vous puissiez écrire une version plus optimisée de tout ce que vous avez écrit.
Ne pas réinventer la roue

6voto

Peter Alexander Points 31990

Juste au sujet de tout le monde à l'aide de C++ utilise la STL, en particulier <algorithm>. Vous ne voulez vraiment pas à avoir à écrire des fonctions de tri vous-même; vous allez finir par faire des erreurs, et à la fin, la performance sera probablement pire.

Si oui ou non il y a des gains de performance dépend évidemment de ce que vous comparez à. En général cependant, en utilisant des algorithmes de la STL est généralement plus rapide que d'écrire vos propres fonctions, sauf si vous avez une astuce particulière qui s'applique à votre cas d'utilisation qui pourrait vous donner l'avantage. Si vous venez d'écrire un standard de quicksort vous-même, il sera probablement plus lent que celui de la STL.

2voto

Puppy Points 90818

Quand devriez-vous utiliser la bibliothèque C ++ Standard? Quand il fournit une fonction dont vous avez besoin.

On sait que certaines choses, comme for_each, ne sont pas très bien supportées par le langage - c'est ce à quoi lambdas est destiné en C ++ 0x.

2voto

birryree Points 29165

Quels sont les projets que vous passer au crible? Ces projets professionnels ou quelque chose d'aléatoire?

Une des choses que j'ai remarqué, c'est que beaucoup de type legacy code (j'ai travaillé sur une base de code qui pré-date du C++98) évite le C++ de la bibliothèque standard en raison de la performance de soucis de la mise en œuvre à l'époque, ou tout simplement parce que les bibliothèques n'existait pas à l'époque. Bien sûr, certains environnements (systèmes embarqués, des jeux, de la défense, etc.) peuvent avoir d'autres exigences qui s'opposent à l'utilisation de C++ de la bibliothèque standard dans de nombreux cas, comme un collègue de la mine a travaillé dans la défense et ne pouvait pas utiliser la STL choses à tous, en raison des exigences du client de ne pas l'utiliser.


En général, si il y a un choix de l'utilisation de la bibliothèque standard vs inventer votre propre roue vs l'aide de quelqu'un d'autre de la bibliothèque, puis en général je choisirais le premier choix de la première. Le code est testé par des milliers, des centaines de milliers de personnes, soumises à davantage de tests et de contrôle, que la plupart des choses que vous mettriez-vous.

Un tiers de la bibliothèque (prenons un exemple comme Boost) si il y a des choses que vous avez besoin. Une bibliothèque comme Boost est bien respecté, a la réputation d'être d'une qualité exceptionnelle de code, et est utilisé/testé/maintenu par un grand nombre de personnes.

Le choix final est une invention de votre propre code, je pense que cela tombe vraiment dans quelques catégories:

  1. Auto-apprentissage du code d'écriture tout juste de l'apprendre, mais cela veut dire qu'il n'y a pas d'attente, vous êtes d'expédition comme le code de production.
  2. Vous avez des exigences particulières qui ne sont pas respectées par tout ce qui peut être acquis ou s'il doit être adapté à partir de quelque chose d'autre. Il y a beaucoup de cela, vous pourriez avoir besoin d'écrire vos propres algorithmes spécifiques pour ce que vous faites.

Mais n'oubliez pas que si vous implémentez votre propre, réfléchir pour savoir si ou non de la bibliothèque standard a déjà, sinon vous pourriez rencontrer un problème d'entretien si quelque chose est très ancrée dans votre code. Ma dernière société a mis en œuvre leurs propres classes de conteneurs, et bien sûr le code de base a augmenté de millions de lignes de code (à travers des tonnes de produits) et tout le monde a utilisé ces développés à l'interne les classes conteneur. Bugs dans ces conteneurs coût d'importantes quantités de développeur de temps et d'argent pour réparer parce qu'il y avait fondamentaux de bugs dans les classes (listes chaînées, les vecteurs, les tableaux associatifs, rien que la norme C++ n'est pas de fournir). Tandis que le nouveau code de la bibliothèque standard, la société n'a tout simplement pas les ressources nécessaires pour démarrer refactoring tous les vieux code.

Si vous pouvez décharger que vous inquiétez pas à d'autres développeurs qui ont de l'expérience avec ce type de code, ET d'obtenir le test de milliers de personnes? C'est une grande victoire!

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