Effektiver Code



  • Wieso nicht std::to_string() ??
    Wäre das nicht am einfachsten, oder überseh ich da was?

    Blödsinn soll ja andersrum sein.
    Aber selbst dann hat der Standard schon Funktionen parat: std::stoi()

    floorball



  • Marius369874 schrieb:

    habe 2 Funktionen um einen String in eine Zahl umzuwandeln. Welche der beiden würdet ihr empfehlen ? Welche ist schneller ? Vielen Dank

    int convertToInt( string wert ) {
    	int val;
    	istringstream is(wert);
    	wert >> val;
    	return val;
    }
    
    int convertToInt( string wert ) {
    	return atoi( wert.c_str() );
    }
    

    Empfehlen würde ich die erstere, wenn Du noch eine Fehlerbehandlung hinzu fügst ..

    int convertToInt( string wert ) {
    	int val;
    	istringstream is(wert);
    	is.exceptions( std::ios_base::failbit ); // throw on read error
    	wert >> val;
    	return val;
    }
    

    ... und schneller ist die zweite. So hast Du schnellen Code, der meistens funktioniert 😉



  • Geschwindigkeitsbarometer zur Orientierung (g++/libstdc++):
    stringstreams: sündhaft langsam, mit optionaler Fehlererkennung
    boost::lexical_cast: akzeptabel, mit Fehlererkennung
    atoi: schnell, keine Fehlererkennung
    std::stoi: schnell, mit teilweiser Fehlererkennung (ignoriert Zeichen nach Zahl)

    Wenn du "sehr schnell, mit Fehlererkennung" möchtest, musst du es wohl selbst implementieren.



  • Wo braucht man eigentlich sehr schnelle Umwandlung von Zeichen zu Zahlen? Irgendwelche Interpreter? Sonst läd man doch beim Starten irgendwelche Strings ein (Configfile oder was auch immer) und wandelt die dann sofort um, welche dann zur Laufzeit schon als Zahlen vorliegen.



  • Namenloser324 schrieb:

    Wo braucht man eigentlich sehr schnelle Umwandlung von Zeichen zu Zahlen? Irgendwelche Interpreter? Sonst läd man doch beim Starten irgendwelche Strings ein (Configfile oder was auch immer) und wandelt die dann sofort um, welche dann zur Laufzeit schon als Zahlen vorliegen.

    Es gibt immer Gründe, warum man Geschwindigkeit braucht. Zum einen könnte das an einer hohen Datenmenge liegen. Dann kann es natürlich auch sein, dass ein Programm schnell starten muss und die Daten aus irgendwelchen Gründen nicht als Binärdaten zur Verfügung gestellt werden können, z.B. weil sie aus einer anderen Quelle kommen.



  • Namenloser324 schrieb:

    Wo braucht man eigentlich sehr schnelle Umwandlung von Zeichen zu Zahlen? Irgendwelche Interpreter? Sonst läd man doch beim Starten irgendwelche Strings ein (Configfile oder was auch immer) und wandelt die dann sofort um, welche dann zur Laufzeit schon als Zahlen vorliegen.

    Schaden kanns nicht... Ich kann mir viele Stellen vorstellen, wo das mehr oder weniger eine Rolle spielt. Werden zwar wahrscheinlich fast alles irgendwelche "Interpreter" sein, aber das kann ja alles mögliche sein, z.B. große CSV Dateien mit Messergebnissen, irgendwelche Netzwerkprotokolle usw. Und wenns eine versteckte Funktion in einer internen Bibliothek ist, würde ich mich einfach mal drüber freuen, wenn sie so schnell wie möglich funktioniert und nicht einfach aus irgendwelchen fragwürdigen Gründen Rechenzeit verschwendet.



  • Ah okay, ich danke euch 🙂



  • Mechanics schrieb:

    Schaden kanns nicht...

    Wenn man mit der Zeit, die man benötigt, um was unnötig zu optimieren, bessere Dinge anstellen könnte, ist das ja auch eine Art Schaden. 😉
    Wenn der Code dadurch dann auch noch länger/unleserlicher/schwerer zu warten wird, sowieso. 😛



  • Exakt. Wenn man etwas optimiert damit das Programm 10µs schneller läuft dann ist das ziemlich vergeudet.

    Zum Thema: http://www.kumobius.com/2013/08/c-string-to-int/

    Für maximale Performance einfach Boost.Spirit nehmen.



  • Und, treffen diese Argumente hier zu? Ist es deutlich mehr Aufwand oder unleserlicher, hier eine performantere Variante zu verwenden?



  • Kann gut sein, dass es hier nicht zutrifft. Ich wollte ja auch nur was an deiner absoluten Aussage rumzickeln. 🙂
    Wenn es sich allerdings auf 'Wenn du "sehr schnell, mit Fehlererkennung" möchtest, musst du es wohl selbst implementieren.' von fern bezog, könnte ich mir schon vorstellen, dass es zutrifft.


Anmelden zum Antworten