2012-08-25 15 views
18

Wann sollte ich stringstream statt string::append() verwenden? Angenommen, ich werde nur Strings verketten.Wann sollte ich String statt Stringstream verwenden?

stringstream ss; 
ss << str1 << "str2" << ... 
Write(ss.str()); 

Oder:

string str; 
str.reserve(10000); 
str.append(str1); 
str.append("str2"); 
... 
Write(str); 

Welche von ihnen ist schneller?

Antwort

17

Ich weiß nicht, welcher wird schneller sein, aber wenn ich raten müsste, würde ich sagen, Ihr zweites Beispiel ist, vor allem seit Sie die reserve Mitgliedsfunktion aufgerufen haben, um einen großen Platz für die Erweiterung zuzuweisen.

Wenn Sie nur Zeichenfolgen verketten, verwenden Sie string::append (oder string::operator+=).

Wenn Sie Zahlen in ihre Zeichenfolgendarstellung konvertieren, sie während der Konvertierung formatieren und dann die Konvertierungsergebnisse zusammenfügen, verwenden Sie stringstreams. Ich erwähne explizit den Formatierungsteil, denn wenn Sie keine Formatierung benötigen, bietet C++ 11 std::to_string an, mit denen numerische Typen in Strings umgewandelt werden können.

14

string.append ist viel schneller. Vor allem, wenn Sie reservieren.

Wenn Sie nur Zeichenfolgen verketten, würde ich string.append verwenden. Ich würde nur string verwenden, wenn ich automatisch muß nicht-Strings in Strings zum Beispiel konvertieren:

const int x(42); 
stringstream ss; 
ss << "My favorite number is: " << x << std::endl; 

Hier string automatisch x in einen String konvertiert und fügt es. Ich muss Atoi nicht anrufen. Stringstream konvertiert alle Grundtypen automatisch für Sie. Es ist großartig für diesen Zweck.

Auch wenn Sie nur Daten in den Stringstream leiten, um ihn später in eine Zeichenfolge zu konvertieren. Sie können ostringstream für die Ausgabe verwenden.

Ich hoffe, dass hilft.

Verwandte Themen