C++ chaîne de longueur fixe de la classe?
Est-il quelque chose comme cela dans la Norme C++ /STL? Idéalement, il devrait être construit comme
fstring s = fstring(10);
J'ai besoin parfois de construire ou disposer d'une chaîne de caractères de taille fixe. Parfois, pour être capable de lire /écrire seulement que le nombre de caractères dans un cours d'eau.
Edit:
Noter que la taille n'est connue qu'à l'exécution, et est différent de l'un à l'autre. Mais tous les fstring
s devez savoir comment travailler ensemble et ont tous la fantaisie string
comportement.
Je suis un peu rouillé mais comment fait-qui diffèrent d'un char[]?
un std::string-esque fixe chaîne de classe pourrait offrir beaucoup plus de fonctionnalités, y compris l'impérieuse <</>>, que la base de char[] type. C'est aussi à ma connaissance pas possible d'avoir std::vector<char[10]>, mais il serait possible d'avoir std::vector<fixed_string<10> >.
Ce "fantaisie" le comportement d'une chaîne voulez-vous utiliser? Il nous aide à fournir une meilleure réponse si nous savions que le sous-ensemble de la chaîne de fonctions de membre en cours d'utilisation.
fantaisie inclure d'entrée et de sortie de flux (y compris le remplissage et la lecture seules les caractères), la chaîne des indices, des itérateurs, et ces. Semble que je vais avoir besoin d'écrire mon propre.
Je pense que vous pouvez tout simplement enrouler une corde, si vous pouvez vivre avec elle que la chaîne peut allouer plus de mémoire que votre fstring permet d'utiliser.
un std::string-esque fixe chaîne de classe pourrait offrir beaucoup plus de fonctionnalités, y compris l'impérieuse <</>>, que la base de char[] type. C'est aussi à ma connaissance pas possible d'avoir std::vector<char[10]>, mais il serait possible d'avoir std::vector<fixed_string<10> >.
Ce "fantaisie" le comportement d'une chaîne voulez-vous utiliser? Il nous aide à fournir une meilleure réponse si nous savions que le sous-ensemble de la chaîne de fonctions de membre en cours d'utilisation.
fantaisie inclure d'entrée et de sortie de flux (y compris le remplissage et la lecture seules les caractères), la chaîne des indices, des itérateurs, et ces. Semble que je vais avoir besoin d'écrire mon propre.
Je pense que vous pouvez tout simplement enrouler une corde, si vous pouvez vivre avec elle que la chaîne peut allouer plus de mémoire que votre fstring permet d'utiliser.
OriginalL'auteur Ayman | 2009-10-15
Vous devez vous connecter pour publier un commentaire.
L'approximation la plus proche aujourd'hui est
boost::array<char, 10>
OriginalL'auteur
Utiliser, par exemple,
OriginalL'auteur
J'ai été en utilisant quelque chose comme cela pour les chaînes alloué sur la pile ou comme partie d'un autre objet. Qui en sortie devient un char*
OriginalL'auteur
Comment hériter
std::string
privé en l'exposant ensuite une petite interface avecusing
, et l'écriture de vos propres << et >> fonctions?OriginalL'auteur
Pourquoi ne pas utiliser std::basic_string de STL comme une chaîne de caractères fixe de classe?
Vous pouvez utiliser le constructeur
comme initialiseur.
Plus tard edit:
Exemple:
Pour cela, vous devez définir votre propre classe, si vous voulez un encapsulé solution ou d'utiliser ce qui existe sur le marché. Voir le boost de la chaîne d'algorithmes pour la coupe d': boost.org/doc/libs/1_40_0/doc/html/string_algo.html
OriginalL'auteur
Avec C++11, on peut aller pour
Également std::string équivalent peut toujours être construit, lorsque requis
OriginalL'auteur
Il y a probablement quelque chose dans boost qui fournit (ce qui est le plus proche que j'ai personnellement vu, c'est coup de pouce.Tableau, ce qui est insuffisant). Toutefois, si vous êtes simplement à la recherche de modèle de la "sous-ensemble" de
std::string
, il n'est pas très difficile de faire une longueur fixe équivalent:Pour toute personne demandant pourquoi s'embêter à faire tout cela, le principal avantage est d'éviter l'allocation de la mémoire sans perdre la plupart de la durée de
std::string
API. Si il y a une autre façon de le faire avecstd::allocator
, je serais curieux de savoir.OriginalL'auteur
C style tableau de caractères?
OriginalL'auteur
Si je vous comprends bien, vous ne voulez pas utiliser
std::string
parce que vous êtes inquiet qu'il pourrait en silence étendre sur vous. Je vois deux options:Utiliser un brut, C-chaîne de style et les fonctions de
cstdio
qui prennent un argument de longueur (par exemple,fgets
).Utiliser un
std::vector<char>
.std::vector<char>
en silence à développer, trop! Prendre stackoverflow.com/questions/1571901/1571978#1571978Seulement si vous le demandez.
operator>>
sur une chaîne de caractères seront automatiquement étendre la chaîne d'accueillir tout ce que vous êtes en train de lire. Avec un vecteur que vous auriez à insérer explicitement ou push_back au-delà de votre limite imposée.Ah, vous faites référence à
operator>>
. Ce n'était pas clair à partir de votre post.question suivante: comment souhaitez-vous réellement
operator>>
dansvector<char>
... 😐OriginalL'auteur