str sstream print mystr library biblioteca c++ stl stringstream

c++ - sstream - stringstream s



¿Debería preasignar std:: stringstream? (2)

¿Ha perfilado su ejecución y descubrió que son una fuente de desaceleración?

Considera su uso. ¿Son en su mayoría mensajes de error fuera del flujo normal de tu código?

En cuanto a reservar espacio ...

Algunas implementaciones probablemente reserven un pequeño búfer antes de que tenga lugar cualquier asignación para el flujo de cadenas. Muchas implementaciones de std :: string hacen esto.

Otra opción podría ser (¡no probado!)

std::string str; str.reserve(50); std::stringstream sstr(str);

Es posible que encuentre algunas ideas más en este hilo gamedev .

editar:

Mucking con rdbuf de la cadena de caracteres también podría ser una solución. Sin embargo, este enfoque es muy fácil de equivocarse, así que asegúrese de que sea absolutamente necesario . Definitivamente no es elegante ni conciso.

Utilizo std::stringstream extensivamente para construir cadenas y mensajes de error en mi aplicación. Las stringstreams generalmente son variables automáticas de vida muy cortas.

¿Tal uso causará la reasignación del montón para cada variable? ¿Debo pasar de una variable de stringstream temporales a una clase?

En este último caso, ¿cómo puedo reservar el buffer de stringstream ? (¿Debería inicializarlo con una cuerda lo suficientemente grande o hay un método más elegante?)


No estoy seguro, pero sospecho que stringbuf de stringstream está estrechamente relacionado con la string resultante. Entonces sospecho que puedes usar ss.seekp(reserved-1); ss.put(''/0''); ss.seekp(reserved-1); ss.put(''/0''); para reservar la cantidad reserved de bytes dentro de la string subyacente de ss . En realidad, me gustaría ver algo como ss.seekp(reserved); ss.trunc(); ss.seekp(reserved); ss.trunc(); , pero no hay un método trunc() para las transmisiones.