Kann jemand die Leistung meines Integer-zu-std::string-Konvertierungscodes übertreffen?
Problem:
Effiziente Konvertierung eine Ganzzahl in einen std::string zu konvertieren, ist eine Herausforderung, die zur Entwicklung verschiedener Methoden geführt hat. In diesem Artikel werden verschiedene Ansätze untersucht und Einsendungen dazu eingeladen, ihre Leistung zu vergleichen.
Methoden:
Gemeinsame Methoden umfassen:
-
Die „C-Weg“: Mit a stringstream.
-
sprintf: Wird oft für die Leistung empfohlen.
-
Boost's lexical_cast: Hat eine eigene Implementierung, die nicht auf Stringstreams angewiesen ist.
-
Bens Algorithmen: Optimiert für Desktop und Embedded Systeme.
-
ltoa (nicht standardmäßig): Weit verbreitet, aber seine Verwendung kann eingeschränkt sein.
Regeln:
Einsendungen sollten bestimmte Richtlinien einhalten:
- Konvertieren Sie sowohl signierte als auch nicht signierte 32-Bit-Ganzzahlen in Dezimalzahlen umwandeln.
- Ausgabe als std::string erzeugen.
- Kompatibilität mit Threading und Signalen sicherstellen.
- Einen ASCII-Zeichensatz annehmen.
- Behandeln Sie INT_MIN korrekt auf einer Zweierkomplementmaschine.
- Die Ausgabe sollte identisch mit der kanonischen C-Version sein, die einen Stringstream verwendet.
- Kompilieren und ausführen auf VC 2010 und g .
Ergebnisse:
Die Die Gewinnerbeiträge zeigten erhebliche Leistungsverbesserungen:
- Eugene Smiths Code: 8-mal schneller als sprintf auf g (http://ideone.com/0uhhX)
- Timo's Code: 15-mal schneller als sprintf auf Visual C (http://ideone.com/VpKO3)
Das obige ist der detaillierte Inhalt vonKönnen Sie diesen Ganzzahl-zu-String-Konvertierungscode übertreffen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!