37 votes

Std :: string fait-il partie de la STL?

(Quand je dis STL, je parle de la bibliothèque de modèles qui tourne autour des récipients, des itérateurs, les algorithmes et les foncteurs.)
Cette question est venue à l'esprit après avoir pensé qu'un std::string surtout se comporte comme un conteneur normal, avec begin et end fonctions (y compris itérateur), un size de la fonction et de la possibilité d'utiliser toutes ces normal STL algorithmes qui fonctionnent sur les conteneurs / plages à travers leurs itérateurs (par exemple, transform, sort, find, etc.).

Dans le même temps, cependant, il n'est pas un conteneur lui-même, comme il ne rentre pas dans l'image de conteneurs magasin arbitraire de données. Aussi, elle opère sur les données contenues principalement par le biais des fonctions de membre, comme substr, find_first_of, etc., alors que true conteneur de ne pas le faire et de laisser les algorithmes de gérer cela.

En outre, la cplusplus site de référence et la norme C++ n'a pas de liste std::string ensemble avec le réel des conteneurs, mais dans une catégorie distincte.
Cependant, sur SGI STL site, basic_string (et, par conséquent, l' string typedef) sont mentionnés avec l'autre récipient et l' basic_string site de référence des états qu'il appartient à la catégorie "contenants".

Maintenant, ma question est, est - string fait partie de la STL ou est-il distinct de la bibliothèque elle-même?
Et si elle appartient à la STL a-t-il différer de l'original STL développé par Stepanov?

33voto

Lightness Races in Orbit Points 122793

Non, pas vraiment. Et oui, type de.

Il y a diverses définitions de "le TSL", y compris:

  • La réelle HP/SGI STL, la bibliothèque d'origine, une partie de la Norme C++ de la Bibliothèque a été fondée sur. Ils ont inclus des conteneurs, les itérateurs et les algorithmes. Les chaînes étaient pas une partie de cela.

  • Les parties de la Norme C++ de la Bibliothèque qui ont été basées sur les SIG bibliothèque STL: les conteneurs, les itérateurs et les algorithmes. Toujours pas de chaînes.

  • Tous les de la Norme C++ de la Bibliothèque. Cette définition n'a absolument aucun fondement dans la logique ou de la réalité, cependant, si elle est suivie, std::string seraient inclus.

Notez que la STL a développé depuis C++ a été standardisé (environ 13 ans, rappelez-vous), et ils ont l'arrière-adopté certaines des choses qui sont allés dans la norme, comme les chaînes. Cela ne veut pas dire qu'ils étaient à l'origine il y en 1998... mais ils sont là aujourd'hui pour la "compatibilité" des raisons.

D'ailleurs, ne paient pas beaucoup d'attention à cplusplus.com ou la manière dont il catégorise les choses. Il est notoirement plein d'erreurs.


Résumé

Le TSL a été des conteneurs, des algorithmes et des itérateurs.

Les chaînes et les ruisseaux ont été adoptées pour le C++98, puis vers l'arrière-adopté-pour le SGI STL.

Si les chaînes sont "partie de la STL" ou pas ne dépend pas de savoir si vous suivez la logique et la raison, ou appelez le standard de la bibliothèque "STL".

Espérons que cette aide.

12voto

Jerry Coffin Points 237758

Il n'y a pas de véritable réponse à cette question. D'une part, std::string a été développé de manière totalement indépendante des autres conteneurs. Sur l'autre main, il avait assez ajoutée à répondre à toutes les exigences d'un accès aléatoire conteneur. Si vous choisissez de les classer que dans le cadre de "STL" ou pas, c'est entièrement à vous, à la fin, c'est juste souligne le fait que "STL" manque un seul, convenu de la définition, et les chances de soudain, elle gagne une signification claire est à distance (pour le dire gentiment).

OIE, "STL" est moche abréviation à utiliser, parce que les gens l'utilisent pour signifier au moins trois choses différentes-mais, malheureusement, il n'y a pas de meilleure abréviation autour avec une meilleure définition du sens, donc STL reste en cours d'utilisation et continuera probablement à le faire (et continuent à faire obstacle à la communication) indéfiniment.

1voto

Cela fait partie de STL. Et std :: string est simplement typedef basic_string. C'est un conteneur, spécialisé (pas en c ++ "spécialisation" signifiant :)) pour le stockage de données avec une sémantique de chaîne. Aucune idée de Stepanov cependant. Il convient de mentionner que STL est une "bibliothèque de modèles standard", pas seulement une sous-partie de conteneur. Cela inclut des algorithmes, des flux et certains traits.

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