Les programmeurs doivent-ils utiliser STL ou écrire leur propre code?

Je ne connais pas beaucoup les structures de données C ++ mais je me demande si vous (les programmeurs) utilisez STL ou écrivez votre propre code? Après tout, la STL est conçue pour effectuer des tâches telles que la recherche, le remplacement et bien plus encore par le biais d’une liste de données.

Quelqu’un n’a pas vraiment besoin d’en apprendre beaucoup sur la liste chaînée, la recherche binary et bien d’autres, car je pourrais utiliser STL. Que suggérerais-tu?

Vous devez utiliser STL, car il est bien testé et optimisé.

Cela ne signifie pas que vous ne devriez pas savoir écrire ces structures de données vous-même. Grâce à cette capacité, vous serez en mesure de choisir la meilleure structure de données STL pour votre application.

Bien que la bibliothèque de modèles standard soit pratique pour effectuer des tâches telles que la recherche, le remplacement, l’utilisation de listes liées, elle ne doit pas remplacer la connaissance de ce qui se passe à l’ intérieur de la bibliothèque.

Vous avez mentionné ne pas avoir besoin d’en apprendre davantage sur les listes liées, les recherches binarys et bien d’autres, mais vous devriez avoir au moins une connaissance pratique du fonctionnement de ces structures de données et de leurs procédures (et savoir quand les utiliser) plus efficace.

Fondamentalement, vous ne devez pas réinventer la roue, mais au moins savoir ce qui fait tourner efficacement les roues.

Utilisez les bibliothèques STL et standard en général lorsque vous le pouvez. D’abord, il est probablement beaucoup mieux testé que votre propre code, et deuxièmement, il garde votre code portable. La seule fois où vous devez réécrire l’une de ces fonctionnalités est à des fins d’apprentissage. Il peut être utile d’écrire votre propre carte associative ou votre liste chaînée, mais pour le code de production, respectez un code bien testé et conforme aux normes.

Une connaissance pratique des structures de données, des méthodes et des applications sous-jacentes des outils fournis par la STL fera de vous un meilleur programmeur. Savoir quand utiliser quel type de conteneur ou quel algorithme est aussi important qu’une implémentation correcte. Parfois, la manière la plus simple de comprendre certains concepts plus complexes consiste à les implémenter vous-même dans le contexte d’une classe de structures de données et d’algorithmes.

Cela dit, le code de la STL a été écrit par des experts et affiné au fil du temps dans une bibliothèque standard utilisée dans le monde entier par des millions de personnes. En pratique, il n’y a presque jamais de raison de “rouler soi-même”, sauf dans les cas extrêmes où la performance (ou la taille) est importante pour un point critique pour votre application exacte.

J’hésite à écrire car je n’ai pas écrit de C ++ depuis 5 ans. Mais quelques choses me sont venues à l’esprit qui n’ont pas encore été discutées.

Si l’implémentation n’est pas adaptée à vos besoins, ne l’utilisez pas si vous pouvez écrire et tester vous-même plus facilement que d’utiliser la bibliothèque. J’ai récemment rencontré ce problème en Java, où j’avais besoin d’un jeu de bits rapide. Détails :: Il y a deux classes pertinentes dans la JVM (BitSet et BigInteger). BitSet ne supporte pas l’initialisation autrement qu’en définissant un bit à la fois ; BigInteger a un signum non pertinent qui confond les choses, et est immuable, ce qui est coûteux dans mon cas. J’ai fini par écrire le mien, avec des tests, en quelques heures. Ça va mieux, c’est plus rapide et je peux faire tout ce que je veux.

L’autre raison d’écrire le vôtre est que si vous ne comprenez pas la spécification de la mise en œuvre de la bibliothèque par rapport à vos exigences, vous ne pouvez pas facilement la tester ou la lire pour déterminer ce qu’elle fait et vous pouvez facilement la copier. Ceci est / était un problème particulier avec les implémentations STL qui sont (ou du moins étaient) livrées avec une documentation cryptée, inadéquate et laconique et un code source opaque sans commentaires qui vous envahit comme une énorme vague de voyous.

Juste pour append ma réponse (du commentaire ci-dessus):

Oui, vous devriez envisager d’implémenter, par exemple, une séquence, une liste liée, en utilisant votre propre code.

C’est ce qu’ils enseignent sur les cours de Comp Sci et ce n’est pas sans raison valable. Mais si vous souhaitez travailler rapidement, utilisez simplement la STL.

Je pense juste que les gens devraient comprendre comment les outils fonctionnent vraiment.

En général, vous devez utiliser des conteneurs STL ou Boost en raison de leur efficacité et de leur fiabilité. Cependant, vous devez avoir une vue du monde correspondante sur les conteneurs existants. Vous devriez connaître ses avantages et ses inconvénients. L’étude de la structure interne du conteneur et des principes de fonctionnement vous permet de mieux comprendre.

J’utilise la bibliothèque standard C / C ++ et STL parce que c’est un gain de temps considérable et que je ne vois pas le besoin de réinventer la roue. J’utilise aussi le boost là où je peux.

C’est toujours un bon exercice d’apprentissage pour écrire votre propre classe de conteneurs et vos algorithmes.

Utilisez STL, sauf si vous avez une raison impérieuse, par exemple la rapidité ou l’exactitude, de ne pas le faire. Vous savez certainement écrire vous-même des structures de données de base.

La STL est bien testée et fiable, mais ce n’est pas la solution la plus rapide. Certains conteneurs allouent beaucoup de petits blocs de mémoire plutôt qu’un gros bloc. Si vous avez vraiment un problème de vitesse, vous pouvez envisager de créer votre propre liste à taille fixe. Mais à de nombreuses fins, STL est la solution standard.

Des gens très intelligents ont écrit le STL. Ensuite, des personnes plus intelligentes l’ont utilisé, testé et perfectionné. Vous pensez que vous allez faire mieux? Rarement. C’est un excellent outil vous devriez l’utiliser autant que possible!

Écrivez vous-même des choses de bas niveau lorsque vous apprenez / jouez, mais au travail, utilisez un code qui a été écrit et affiné par des experts au fil des ans et qui est / est testé par des milliers d’ingénieurs dans des milliers de conditions différentes.

En d’autres termes, n’utilisez votre code que si votre code peut battre les autres codes !