operator library c++ string stringstream

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.