Es gibt keinen Grund zu der Annahme, dass die anliegenden Funktionen von std::string
langsamer sind als die Einfügefunktionen von stringstream
. std::string
wird im Allgemeinen nichts anderes als eine mögliche Speicherzuweisung/Kopie plus Kopieren der Daten in den Speicher sein. stringstream
hat mit Dingen wie Locales usw. zu tun, auch für grundlegende Anrufe write
.
Außerdem bietet std::string
Möglichkeiten, alles außer der ersten Speicherzuweisung zu minimieren oder zu eliminieren. Wenn Sie reserve
genügend Platz haben, ist jede Insertion etwas mehr als ein memcpy
. Das ist mit stringstream
nicht wirklich möglich.
Auch wenn es schneller als std::string
‚s Funktionen anhängt, haben Sie immer haben die Zeichenfolge aus dem stringstream
zu kopieren etwas damit zu tun. Das ist also eine weitere Kopie, die Sie nicht benötigen mit std::string
.
Sie sollten std::stringstream
verwenden, wenn Sie Formatierung benötigen, nicht nur für das Zusammenkleben einiger Strings.
Im Vergleich zu was? '.append()'/'operator + ='? – Rapptz
Ich denke, ein .reserve() gefolgt von mehreren .append()/+ = sollte ziemlich effizient sein. Zeichenfolgen sind in C++ nicht unveränderlich wie in Java/C#/etc. Daher gibt es keinen Grund für eine StringBuilder-Typklasse. – Bwmat
@Rapptz Ja. 'append()' und 'operator + =' –