Streams und Löschen?
-
Hi,
ich häng grad fest. Ich spiele ein wenig mit stringstreams rum und steh auf dem Schlauch. Wie löscht man den Inhalt eines Streams?

Hier mal ein bissl Kode:
ostringstream stream; string string; for (int i=1; i<4; ++i) { // feed the stream for (int j=1; j<4; ++j) { stream << "(" << (float) (j*i)*1.23 << ")"; } // reset the stream ??? string = stream.str(); stream.clear(); cout << string << endl; } std::cin.get();Eigentlich möchte ich drei Tripel angezeigt bekommen, aber ich hab keine Methode gefunden, den Stream zu reseten. Warum wird das einem so schwer gemacht?
Grüße,
don_basto.
-
Habs.
// reset the stream string = stream.str(); stream.str(""); cout << string << endl << endl;
-
don_basto schrieb:
ich häng grad fest. Ich spiele ein wenig mit stringstreams rum und steh auf dem Schlauch. Wie löscht man den Inhalt eines Streams?

.. am besten gar nicht. Es ist grundsätzlich immer besser, Variablen erst dann zu deklarieren, wenn sie benötigt werden. Streams kann man derart verändern, dass es immer besser ist, sie wieder neu anzulegen.
Also etwa so:
for (int i=1; i<4; ++i) { ostringstream stream; // feed the stream for (int j=1; j<4; ++j) { stream << "(" << (float) (j*i)*1.23 << ")"; } string string = stream.str(); cout << string << endl; }don_basto schrieb:
Eigentlich möchte ich drei Tripel angezeigt bekommen, aber ich hab keine Methode gefunden, den Stream zu reseten. Warum wird das einem so schwer gemacht?
.. weil's nicht not tut.

Gruß
Werner
-
Werner Salomon schrieb:
...
.. weil's nicht not tut.
Gruß
WernerScheint mir auch so

@don_basto: Warum überhaupt zwischendurch den stream ausgeben und resetten ?
Du kannst ein endl (oder besser: Ein "/n") ebenso in einen ostringstream werfen wie in cout und dann den fertigen ostringstream "couten".
Damit sparst Du Dir auch jeden Fall das dauernde Resetten.
Mir ist noch nicht ganz klar, ob Du nun Deine Ergebnisse nun in einem ostringstream sammeln oder per cout ausgeben willst. Vielleicht ist es einfacher, wenn Du einfach das eine tust und das andere lässt.Also entweder
ostringstream stream; for (int i=1; i<4; ++i) { // feed the stream for (int j=1; j<4; ++j) { stream << "(" << (float) (j*i)*1.23 << ")"; } } // Hier irgendwas mit stream machen ... // vielleicht ausgeben, in Datei schreiben, auf Hintern tätowieren, .... // was man mit ostreams halt so tut. ...oder
for (int i=1; i<4; ++i) { for (int j=1; j<4; ++j) { cout << "(" << (float) (j*i)*1.23 << ")"; } } ...Alternativ kannst Du das natürlich auch in eine Funktion packen und beim Aufruf entscheiden:
void getValues(ostream& o = cout) { for (int i=1; i<4; ++i) { // feed the stream for (int j=1; j<4; ++j) { o << "(" << (float) (j*i)*1.23 << ")"; } } }
Gruß,
Simon2.
EDIT: Warum sind denn jetzt eigentlich Zeilennummern vor meinem Sourcecode ?
Ist ja ganz praktisch, aber .... warum ?
-
@simon2:
In meinem Falle ist es praktisch den Stream zu leeren. Ich hab den Stream in einer Klasse als Attribut eingebettet, die ihn mit Daten füllt. Nachdem der Inhalt des Streams abgefragt wurde (zum Verarbeiten,Loggen, etc.), brauch ich die Daten nicht mehr, will sie ja nicht mehrfach verarbeiten!