Les flots dentrées-sorties ne concernent pas que les périphériques. Parfois, il peut être utile de les utiliser en mémoire. Ainsi, si lon souhaite avoir une chaîne de caractères représentant la valeur dun entier, il suffit de lécrire dans un flot en mémoire, puis de lire ce flot comme une chaîne.
Les classes strstreambase
, istrstream
, ostrstream
et strstream
sont les homologues en mémoire de ios
, istream
, ostream
et iostream
. Elles sont définies dans <strstrea.h>
; vous devez donc inclure ce fichier dans votre programme (cela inclut automatiquement <iostream.h>
).
Ces classes utilisent le type de tampon spécial strstreambuf
. La classe de base sert uniquement pour les dérivations des trois autres, qui ont lallure suivante :
class istrstream : public strstreambase, public istream { public: istrstream(char*;; istrstream(char*, int); ~istrstream();};class ostrstream : public strstreambase, public ostream { public: ostrstream(char*, int, int = ios::out); ostrstream(); ~ostrstream(); char* str(); int pcount();};class strstream : public strstreambase, public iostream { public: strstream(); strstream(char*, int, int); ~strstream(); char* str();};
Les constructeurs par défaut initialisent les instances sur des chaînes vides. Les autres constructeurs permettent de donner un tampon de mémoire et une taille maximale aux instances ; le troisième paramètre de celui de ostrstream
et strstream
est le mode douverture.
Les méthodes str
donnent simplement le début du tampon mémoire utilisé. La méthode pcount
de ostrstream
indique le nombre de caractères en attente dans le tampon.
Lorsque les tampons sont créés par les instances (appel des constructeurs par défaut), elles les gèrent entièrement et les augmentent à chaque écriture ; ils sont alors détruits par le destructeur.
Voici par exemple une fonction qui renvoie la chaîne de caractères correspondant à lécriture dun nombre à virgule flottante (avec un paramètre optionnel pour le nombre de décimales souhaitées), et une fonction inverse qui renvoie la valeur stockée dans une chaîne :
char *chainedouble(double d, int precis = -1){ static char tampon[30]; ostrstream os(tampon, 30); if (precis >= 0) os.precision(precis); os << d; return tampon;}double valeurdouble(char *s){ double d; istrstream is(s); is >> d; return d;}
Les classes strstreambase
, istrstream
, ostrstream
et strstream
occupent respectivement 68, 74, 72 et 78 octets en mémoire.
![]() | ![]() | Suivant ![]() |