c++ - library - stringstream s
std:: stringstream vs std:: string para concatenar muchas cadenas (1)
Sé que una de las ventajas de std::stringstream
es que es un std::istream
por lo que puede aceptar entradas de cualquier tipo que defina el operator<<
a std::istream
y también de los tipos primitivos.
No voy a utilizar el operator<<
; en lugar de eso solo voy a concatenar muchas cadenas. ¿La implementación de std::stringstream
hace más rápido que std::string
para concatenar muchas cadenas?
No hay razón para esperar que las funciones stringstream
std::string
sean más lentas que las funciones de inserción de stringstream
. std::string
generalmente no será más que una posible asignación / copia de memoria más la copia de los datos en la memoria. stringstream
tiene que lidiar con cosas como locales, etc., incluso para llamadas de write
básicas.
Además, std::string
proporciona formas de minimizar o eliminar cualquier cosa que no sea la primera asignación de memoria. Si reserve
suficiente espacio, cada inserción es poco más que un memcpy
. Eso no es realmente posible con stringstream
.
Incluso si fuera más rápido que las funciones stringstream
de std::string
, todavía tiene que copiar la cadena fuera de la cadena de stringstream
para hacer algo con ella. Así que esa es otra asignación + copia, que no necesitarás con std::string
. Aunque al menos C ++ 20 parece estar listo para eliminar esa necesidad particular.
Debe usar std::stringstream
si necesita formatear , no solo para pegar algunas cadenas.