Pregunta

Yo te pido en el contexto de rendimiento. Es stringstream simplemente una cadena / vector, por lo que escribir en él puede resultar en todo su contenido está copiando en un pedazo más grande de la memoria, o se trata de hecho de una manera más complicado (por ejemplo, una lista de cadenas o lo que sea)?

¿Fue útil?

Solución

Es hasta el vendedor biblioteca estándar de cómo implementar stringstream (o alguna de las funciones de la biblioteca para el caso). Usted puede mirar en el encabezado sstream enviado con su compilador para ver cómo se implementa allí. Que tanto en el aspecto teórico ...

En cuanto a la experiencia práctica y las mediciones muestran, ostringstream es a menudo lenta en comparación con otros métodos para dar formato a los datos como cadenas de caracteres. Pero, de nuevo, solamente optimizará después de haber medido que lo que se desea optimizar es de hecho un cuello de botella, que de lo contrario sólo será una pérdida de tiempo en el mejor.

Si sus mediciones muestran que el rendimiento de ostringstream realmente es un problema para usted, considere el uso de Boost.Karma . Por supuesto que hay más razones para usar Boost.Karma que el rendimiento justo, por lo que si usted está comenzando un nuevo código en lugar de querer modificar uno utilizando flujos de cadena existente, es posible que también desee utilizar Karma desde el primer momento.

Otros consejos

27.7.3 / 1 dice que basic_ostringstream utiliza un basic_stringbuf. Creo que 27.7.1.3/8 dice que basic_stringbuf hace que el espacio mediante la reasignación de un buffer, y ni siquiera garantiza un crecimiento exponencial (y por lo tanto, O amortizado (1) para agregar).

Pero encuentro la sección de la impenetrable bastante estándar arroyos, y siempre existe la regla de "como si". Así que no puedo prometer que el uso de un deque debajo (y consolidar cuando alguien pregunta por la cadena / tampón) que realmente está prohibido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top