2009-08-21 8 views
4

La classe basic_string a apparemment été conçue comme un conteneur à usage général, car je ne trouve aucune fonction spécifique au texte dans sa spécification à l'exception de la fonction c_str(). Juste par curiosité, avez-vous déjà utilisé la classe conteneur std::basic_string pour autre chose que de stocker des données de caractères lisibles par l'homme?Utilisations de std :: basic_string

La raison pour laquelle je pose cette question est parce qu'il faut souvent choisir entre faire quelque chose de général ou spécifique. Les concepteurs ont choisi de rendre la classe générale std::basic_string, mais je doute qu'elle soit utilisée de cette façon.

+0

Qu'entendez-vous par "texte"? –

+0

pas moi, seulement char ou wchar ou TCHAR – kenny

Répondre

4

Il a été conçu comme une classe de chaînes (par exemple, length() et toutes ces dizaines de fonctions de recherche), mais après l'introduction de la STL dans la bibliothèque std, il était équipé être aussi un conteneur STL (donc size() et les itérateurs, avec <algorithm> rendant toutes les fonctions de recherche redondantes).

Son but principal est de stocker des caractères, cependant. L'utilisation de n'importe quel POD n'est pas garantie (et ne fonctionne pas, par exemple, lors de l'utilisation de std lib de Dinkumware). En outre, le std::char_traits nécessaire n'est pas nécessaire pour être disponible pour autre chose que char et wchar_t (bien que de nombreuses implémentations viennent avec une mise en œuvre raisonnable du modèle de base).

Dans la norme d'origine, la classe n'était pas obligée de stocker ses données dans un morceau de mémoire contigu, mais cela a changé avec C++ 03. En bref, il est surtout utile en tant que conteneur de caractères (a.k.a. "string"), où "character" a une définition assez large.

Le "plus sauvage" que je l'ai utilisé pour est de stocker des chaînes codées différemment en utilisant différents types de caractères. De cette manière, les chaînes de codages différents sont incompatibles même si elles utilisent la même taille de caractères (ASCII et UTF-8) et, par exemple, l'affectation provoque des erreurs de compilation.

+0

La modification s'est produite en C++ 03. –

+0

@ltcmelo: Merci! – sbi

1

oui - J'ai implémenté la machine d'état pour 'unsigned int'. Pour stocker/comparer les états basic_string a été utilisé

+0

gosh, cela doit avoir été une machine à états vraiment complexe –

+0

@Dewfy: Quel était l'avantage de 'std :: basic_string' sur, disons,' std :: vector' dans ce cas ? – sbi

+0

@sbi bénéfice est sémantique uniquement - en utilisant concatentaion sur + = – Dewfy

Questions connexes