Fragen zum Istringstream

Hey Leute habe eine Liste geschrieben und da hat mir mein Freund folgende Zeilen gegeben

getline(d_laden,s,’;’);
istringstream puffer1(s); //input string aus der //Datei laden und in den puffer!
puffer1 >> n_name;

Meine Frage nun was macht dieses istringstream genau!

Also ich weiss das ich mit getline aus der Datei ein String hole und in das Objekt s speichere und dann wird dieser String in den Speicher n_name abgelegt, so was macht dieses istringstream nun???

Danke!!!

Gruss Saqib

Hallo

Hey Leute habe eine Liste geschrieben und da hat mir mein
Freund folgende Zeilen gegeben

Meine Frage nun was macht dieses istringstream genau!

Ein ‚stringstream‘ ist ein Objekt, das
vorne das übliche (C++)-IO-Stream-Interface
hat (mit &gt:wink: und hinten in einen String
statt in ein File schreibt (oder liest).

http://www.cplusplus.com/ref/iostream/stringstream/

getline(d_laden,s,’;’);
istringstream puffer1(s); //input string aus der
//Datei laden und in den puffer!
puffer1 >> n_name;

Also ich weiss das ich mit getline aus der Datei ein String
hole und in das Objekt s speichere und dann wird dieser String
in den Speicher n_name abgelegt, so was macht dieses
istringstream nun???

Es kopiert ’ s’ in ein Objekt ‚stringstream‘,
welches dann die Operatoren ‚>>‘ usw. bereithält.

Trotzdem würde ich das nicht (oder nur als
klitzekleine Ausnahme) je in ‚quality code‘
verwenden. Die Iostream-Lib ist IMHO etwas
overdesigned‘ und ‚clunky:wink:

 // stdio-Variante:
 ...
 if(fgets(str, sizeof str, DATEI)) {
 sscanf(str, "%s", n\_name);
 }

Vorteil der Iostreams hier (vs. stdio):
man muss nicht wissen, welchen Datentyp
n_name hat. Aber in 99 von 100 Fällen
weiss man diesen eben :wink:

Grüße

CMБ

Hi

Trotzdem würde ich das nicht (oder nur als
klitzekleine Ausnahme) je in ‚quality code‘
verwenden. Die Iostream-Lib ist IMHO etwas
overdesigned‘ und ‚clunky:wink:

Ich hatte mal ausprobiert, welche Variante denn letztendlich schneller ist mit folgendem Programm:

#ifdef USE\_C
#include 
#else
//#include 
#include 
#endif

int
main (int argc, char\* argv[])
{
 int i;
 #ifndef USE\_C
 std::ios\_base::sync\_with\_stdio (false);
 #endif
 for (i = 0; i 

Letztendlich sind durch den Synchronisationsschalter beide mindestens gleich schnell (jedenfalls auf meinem Rechner), also würde ich ja sagen, das die Performance da nicht so stark reinspielt? (täusch ich mich da stark?)

Was meinst du dazu Semjon?

mfg TLF