Lässt sie folgender Ablauf schneller machen:



  • Hallo!

    Besteht ein Unterschied zwischen folgenden Varianten (bei der ersten wurde ofstream playerLogfile; außerhalb der forschleife deklariert):

    ofstream playerLogfile;
    
    	// Für jeden Teilnehmer eine eigene Datei anlegen
    	for(int i=0; i<vplayer.size(); ++i)
    	{
    		playerLogfile.open((vplayer[i]+".txt").c_str(),ios::app);
    
    		// Playerlogfile öffnen und mit der folgenden for-schleife Einträge anhängen
    		for(string Read; getline(FileIn, Read);)
    			if(Read.substr(34,4) == vplayer[i])
    				playerLogfile<<Read<<endl;	
    
    		FileIn.clear();
    		FileIn.seekg(0);
    		playerLogfile.close();
    	}
    

    Und

    // Für jeden Teilnehmer eine eigene Datei anlegen
    	for(int i=0; i<vplayer.size(); ++i)
    	{
    		ofstream playerLogfile((vplayer[i]+".txt").c_str(),ios::app);
    
    		// Playerlogfile öffnen und mit der folgenden for-schleife Einträge anhängen
    		for(string Read; getline(FileIn, Read);)
    			if(Read.substr(34,4) == vplayer[i])
    				playerLogfile<<Read<<endl;	
    
    		FileIn.clear();
    		FileIn.seekg(0);
    		playerLogfile.close();
    	}
    

    Oder ist das egal?



  • das erste dürfte nicht schneller sein, ist dafür aber auch mieser stil
    beim 2. kannste das close ruhig weglassen, der dtor der eh aufgerufen wird erledigt das für dich



  • otze schrieb:

    das erste dürfte nicht schneller sein,

    einspruch euer ehren!
    ichj sehe keinen technischen grund, warum die beiden varianten auch nur einen takt auseinander liegen müssen.

    ist dafür aber auch mieser stil

    ja, zweifellos mies.

    beim 2. kannste das close ruhig weglassen, der dtor der eh aufgerufen wird erledigt das für dich

    ja.

    aber wenn du was über speed sagen willst, erzähl im doch mal den unterschied zwischen <<endl und <<'\n' und warum man mal das eine und mal das andere verwendet.



  • einspruch euer ehren!
    ichj sehe keinen technischen grund, warum die beiden varianten auch nur einen takt auseinander liegen müssen.

    Solch einen Compiler kenn ich aber nicht.

    ofstream out("bla");
    

    Oeffnet bla und dann werden die Flags gesetzt.

    ofstream out;
    out.open("bla");
    

    Setzt die Flags, oeffnet die Datei und dann setzt es die Flags erneut.

    OK, der Compiler könnte nun merken, dass die Flags zwischen ofstream out und out.open nicht gebraucht werden und das setzen der Flags beim inlinen aus dem Kostructor schmeissen. Sollte mich aber sehr wundern wenn du einen findest der das kann.



  • volkard schrieb:

    otze schrieb:

    das erste dürfte nicht schneller sein,

    einspruch euer ehren!
    ichj sehe keinen technischen grund, warum die beiden varianten auch nur einen takt auseinander liegen müssen.

    sagte ich das nicht, mein Meister?

    aber wenn du was über speed sagen willst, erzähl im doch mal den unterschied zwischen <<endl und <<'\n' und warum man mal das eine und mal das andere verwendet.

    machs doch selbst 😃



  • [quote="otze"]

    volkard schrieb:

    aber wenn du was über speed sagen willst, erzähl im doch mal den unterschied zwischen <<endl und <<'\n' und warum man mal das eine und mal das andere verwendet.

    machs doch selbst 😃

    Bevor hier jetzt noch weitere derart sinnvolle Kommentare kommen, verweise ich doch einfach mal auf einen Artikel von Scott Meyers:

    http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf



  • [quote="HumeSikkins"]

    otze schrieb:

    volkard schrieb:

    aber wenn du was über speed sagen willst, erzähl im doch mal den unterschied zwischen <<endl und <<'\n' und warum man mal das eine und mal das andere verwendet.

    machs doch selbst 😃

    Bevor hier jetzt noch weitere derart sinnvolle Kommentare kommen, verweise ich doch einfach mal auf einen Artikel von Scott Meyers:

    http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf

    Bist du verliebt in Scott Meyers? In jedem zweiten Posting zitierst du irgendwas von Scott Meyers...



  • [quote="otze"]sagte ich das nicht, mein Meister?[quote]
    bei genauerer betrachung komme ich nicht umhin, dem zuzustimmen.



  • gaylord schrieb:

    Bist du verliebt in Scott Meyers?

    sind wir das nicht alle? des einen idol ist halt olli kahn und der andere ist programmierer.



  • Ich verstehe die erklärung nicht so ganz, stimmts so:

    Bei '\n' wird der Buffer nicht geleert, d.h. ich schreibe eine zeile in die datei und im Buffer steht noch die zeile.
    Bei endl wird die zeile geschrieben, buffer gelöscht und eine neue zeile erstellt.

    Deshalb ist endl langsamer. stimmts so?



  • ja, wobei der buffer auch manchmal von alleine losgeht, wenn er voll ist oder am Programmende. Flushen kannst du auch ohne Newline mit std::flush btw.



  • kingruedi schrieb:

    ja, wobei der buffer auch manchmal von alleine losgeht, wenn er voll ist oder am Programmende.

    Oder vor einer Eingabe. Standardmäßig sind cin und cout ge"tie"d.



  • wusste doch ich hab etwas vergessen 🙂



  • Also müsste es doch aber so aussehen:

    'n':
    Schreibe buffer, neue Zeile, Buffer wird wieder gefüllt (überschreiben? geleert und wieder beschrieben?)

    endl:
    schreibe buffer, leere, buffer, neue zeile, beschreibe buffer

    Läuft das nicht doch irgendwie auf das gleiche hinaus 😕 ?



  • is eher so:
    "\n"=füge "\n" an den string im buffer an
    endl=zeige buffer an,leere buffer, springe in nächste zeile



  • ok alles klar dann stelle ich mal den code um 🙂


Anmelden zum Antworten