Est-il lisible de la mise en œuvre de la STL?
Je suis sur Linux; en regardant la STL en-têtes; ils sont vraiment vraiment compliqué.
Est là, quelque part, une version plus petite de la STL qui a des fonctionnalités de base de la STL, mais en réalité c'est lisible?
Merci!
- Pourquoi avez-vous besoin qu'elle soit lisible? Vous n'êtes pas censé avoir besoin de lire le code source. Il est documenté de sorte que vous pouvez utiliser la bibliothèque sans avoir à lire la mise en œuvre
- Je suis en train d'écrire certains modèles de mon propre. Je veux comprendre comment la STL est mis en œuvre pour apprendre de leurs compromis.
- C'est souvent la peine de jeter un regard sous les couvertures à des fins éducatives. Pas tous les regarder à l'intérieur d'une boîte noire pour les sournois encapsulation-la rupture des raisons. 🙂
- Mais la plupart d'entre eux sont. De toute façon, il y a peu à apprendre de lui. Code STL n'est pas conçu pour être 1) nice, ou 2) portable. Il est généralement conçus pour des compilateurs et des plates-formes, ce qui signifie qu'il peut s'en tirer avec tous la mise en œuvre spécifique de hacks que votre code ne doit pas compter. Il y a beaucoup à apprendre de la STL, mais de vous apprendre à partir de l'interface et la documentation et la conception sous-jacente, pas la mise en œuvre.
- Je pense que le MSVC version, par exemple, pourrait être considéré comme tout, mais lisible :>
- Je suis en désaccord; comme vous acquérir de la compréhension du langage C++, la mise en œuvre de la STL est tout à fait compréhensible. Il faut juste "un tout" pour que cela se produise. 😮
- Il n'existe pas de "la mise en œuvre de la STL".
- Je ne suis pas entièrement sûr de savoir comment répondre qui?
- Je voulais dire il n'est pas "la" mise en œuvre - il y a beaucoup, certains plus ou moins lisible que les autres.
- Juste parce qu'il est possible d'apprendre la langue (et la patience) de comprendre un STL mise en œuvre, il n'est pas automatiquement que vous auriez du apprendre quoi que ce soit à partir de l'exercice. Et tout comme avec pertinence, il n'y a aucune garantie que ce que vous "apprendre" est vraiment bon. La plupart des gens qui vont sur ce chemin immédiatement commencer à utiliser le trait de soulignement suivies par des lettres majuscules pour l'ensemble de leurs paramètres de modèle, parce que c'est ce que la bibliothèque standard n'........ Et bien sûr, ce n'est pas légal, car ces noms sont réservés pour la mise en œuvre.
- Si vous voulez apprendre les détails concrets de C++, de lire, pas un STL mise en œuvre
- Des règles différentes s'appliquent pour la bibliothèque standard et pour le code utilisateur. En essayant d'imiter la bibliothèque standard lors de l'écriture de code d'utilisateur est généralement une Mauvaise Idée. Pour des raisons de portabilité, la conformité aux normes raisons et pour des raisons de lisibilité.
- Je sais qu'. 😮 @jalf.com: je voulais dire que la compréhension d'un STL mise en œuvre est un effet secondaire d'une profonde compréhension du langage C++ et la façon dont il est censé être utilisé. La compréhension n'est pas seulement le "comment", mais aussi le "pourquoi". Comme je l'ai mentionné dans mon post ci-dessous, la compréhension suit seulement après avoir pris connaissance des objectifs, la justification et les avantages et les limites du langage (C++).
- Il ne faut pas se laisser distraire. L'OP veut lire son STL mise en œuvre comme un exercice d'apprentissage. Donc, pour les fins de cette question, la lecture et la compréhension d'un STL mise en œuvre n'est pas un effet secondaire. En dehors de cela, vous n'êtes pas susceptibles de connaître le "pourquoi" en lisant le code source. En prenant mon exemple ci-dessus, encore une fois, la lecture de la source ne vous raconte pas le "comment": (types de modèle devrait commencer avec un trait de soulignement suivie en lettre capitale), mais elle ne vous dit pas pourquoi: (car ces noms sont réservés pour la mise en œuvre, afin de ne pas risque de collisions avec le nom défini par l'utilisateur)
- Coup de pouce. Si elle est toujours assez compliqué.
Vous devez vous connecter pour publier un commentaire.
Il y a un livre Le C++ Standard Template Library, co-auteur de l'original de la STL concepteurs Stepanov & Lee (en collaboration avec P. J. Plauger et David Musser), qui décrit une mise en œuvre possible, complète avec code - voir http://www.amazon.co.uk/C-Standard-Template-Library/dp/0134376331.
Oui, il est original de mise en œuvre de la STL par Alexander Stepanov et Meng Lee. C'est la plus lisible STL mise en œuvre que j'ai jamais vu. Vous pouvez le télécharger à partir d'ici.
Ci-dessous est une mise en œuvre de la paire. Remarque la façon lisible le code source était vraiment:
Retour aux sources!
std::bad_alloc
et permet simplement de fuite de mémoire.vector<T>::reserve
est mis en œuvre. Il y a des éléments copiés qui peut lever une exception, auquel cas la mémoire allouée morceau ne sera pas libéré.- Je utiliser le Le C++ Standard Library: Un Tutoriel et de Référence et la recommande fortement. Bien sûr, il n'est pas quelque chose que vous lisez couverture de couverture, mais elle est très pratique de référence. Découvrez les commentaires sur Amazon ainsi.
Noter que du CCG STL-têtes ont la tabulation fixé à huit. Reconfigurer votre éditeur ou remplacer les tabulations avec huit espaces, et il devrait être beaucoup plus lisible.
Les deux points principaux ressortent:
Comme une note de côté, vous pourrait avoir plus de succès avec les MSVC version parce qu'il n'essaie pas de cible
plusieurscomme de nombreux compilateurs. Compilateur de bugs et la mise en œuvre définies par le comportement de résultat dans divers subtiles des solutions de contournement. Comme ces solutions de contournement de croître en nombre (comme certainement le cas lorsque vous ajoutez plus de compilateurs), le code peut obtenir brute rapide.Pour une plus récente et approfondie de l'explication des "règles" de la STL (tels que les itérateurs), découvrez un nouveau livre co-écrit par Stepanov: http://www.elementsofprogramming.com/
Si vous aimez les mathématiques, ce livre va vous exciter, car ce que les auteurs décrivent est essentiellement une algèbre de calcul. Le site contient un exemple de chapitre.
RDESTL donne un petit sous-ensemble de la STL fonctionnalité' (mais aussi quelques extras).
Personnellement, j'ai trouvé le code très instructif et plus facile à naviguer que le gros des gars comme STLPort ou Dinkumware de mise en œuvre qui est livré avec VC++.
Bien, la STL est assez compliqué, donc je pense qu'il y a une certaine quantité de complexité essentielle qui se passe ici. Il n'est pas surprenant que cela peut paraître un peu déroutant au premier coup d'œil.
Cela dit, peut-être que vous pourriez vérifier Borland STLport et voir si vous trouvez qu'un plus facile à lire.
Le TSL est une très optimisé de la bibliothèque qui n'est plus ce qu'elle fait par habilement exploiter les fonctionnalités avancées du C++, et le compilateur. En outre, beaucoup de choses sont inline, donc il n'y a pas de véritable tas de code à regarder, comme dans une application. Je vous recommande la suite de Neil conseils.