2 Fragen zu stringstream
-
Hi!
Gewöhn mich gerade noch in die STL ein, deshalb meine 2 Fragen
1.) Ist es richtig, dass ich stringstream als Ersatz für sprintf verwende?
Also so:stringstream buffer; buffer << frameCounter << " FPS Detail: " << detailLevel << ", Exakt: " << exactDetailLevel; DrawText(buffer.str());
2.) Ist es richtig, dass auch für char-Arrays (also die Texte in dem String
im Code) die Operatoren << und >> implementiert sind oder funktioniert der Code
nur "zufällig"?Schon mal Danke für eure Antworten
MfG,
EnERgYzEr
-
EnERgYzEr schrieb:
Hi!
1.) Ist es richtig, dass ich stringstream als Ersatz für sprintf verwende?
Also so:stringstream ist in der Tat eine mögliche Alternative zu sprintf.
Aber sprintf solltest du unabhängig davon überhaupt nie verwenden. Wenn dann snprintf (C-Standard seit C99 und eine gängige Erweiterung seit 750 Jahren).
stringstream hat den Vor- bzw. Nachteil, dass es sein eigenes Memory-Management mitbringt. Das ist bequem und sicher, dafür aber auch nicht so performant wie das direkte Schreiben in vorhandenen Puffer.
Eine andere Alternative ist z.B. strstream.2.) Ist es richtig, dass auch für char-Arrays (also die Texte in dem String
im Code) die Operatoren << und >> implementiert sind oder funktioniert der Code
nur "zufällig"?Da werden genau die selben Operatoren verwendet wie bei cout auch. stringstream
ist ein iostream. Jeder Typ der einen op<< für ostream bzw. einen op>> für istream besitzt, kann auch in einen stringstream geschrieben bzw. aus einem stringstream gelesen werden.
Keine Zufälle an Board.
-
wenn du genug Zeit (Rechenzeit) zur Verfueguegung hast, oder soweiso den Stream Brauchst, dann klar, isses die saubere methode ....
Nur die ganze Formatierung ist eben schwerste Handarbeit und blaeht den code auf ... wenn man nicht eh eine einfache Formatierung also standard strings, Zahlen im standard format ... zeilenendezeichen etc will ....Nen anderer Aspekt ist auch ... wenn du sehr viele Daten schreibst, und dein Speicher irgendwann mal platzt ... weichst du mit der streammethode sehr schnell auf ne temp datei aus ... beim raw speicher hast da noch etwas mehr zu tun ....
auf der anderen seite, stringstream soweiso, und die ganze dynamische allocierung ist fuer zeitkritische sachen der overkill ....
Musst du schnell kleine Zeichenketten formatieren ... ist nichts schneller wie ein
char strBuff [1024]; _snprintf(strBuff,1024 .... );
(Falls die MSVC benutzt, da gibts das eben als _snprintf keine Ahnung wieso das _ ? )
Ciao ...
-
RHBaum schrieb:
Falls die MSVC benutzt, da gibts das eben als _snprintf keine Ahnung wieso das _ ?
Es ist keine C-Standard Funktion.
-
HumeSikkins schrieb:
Wenn dann snprintf (C-Standard seit C99 und eine gängige Erweiterung seit 750 Jahren).
MSVC6.0 unterstützt C99 allerdings nicht.
-
Shlo schrieb:
RHBaum schrieb:
Falls die MSVC benutzt, da gibts das eben als _snprintf keine Ahnung wieso das _ ?
Es ist keine C-Standard Funktion.
Nicht C89 und auch nicht C++98 oder C++03, dafür aber C99.