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.