2011-03-13 8 views
73
 
    ostringstream s; 

    s << "123"; 
    cout << s.str().c_str() << endl; 

    // how to clear ostringstream here? 
    s << "456"; 
    cout << s.str().c_str() << endl; 

salida es:Cómo borrar ostringstream

 
123 
123456 

necesito:

 
123 
456 

¿Cómo se suprimen ostringstream para obtener una salida deseada?

Respuesta

161
s.str(""); 
s.clear(); 

Se requiere que la primera línea para restablecer la cadena a estar vacío; la segunda línea es necesaria para borrar los indicadores de error que se pueden establecer. Si sabe que no hay indicadores de error configurados o no le importa reiniciarlos, entonces no necesita llamar al clear().

Normalmente, es más fácil, más limpio y más sencillo (¿reenfoque directo?) Usar un nuevo objeto std::ostringstream en lugar de reutilizar uno existente, a menos que el código se utilice en un punto caliente de rendimiento conocido.

+3

+1 para crear una transmisión nueva cada vez. Los flujos pueden tener un montón de estado interno. Restablecer todo eso requiere al menos la misma cantidad de código que el constructor de la secuencia. –

+2

Esta respuesta también vale la pena: http://stackoverflow.com/a/624291/142239 –

+0

pregunta relacionada: cuando se declara en un bucle, se destruirá el ostringstream y se construirá en cada iteración, o tengo que usar este método? Por ejemplo, 'for (int i = 0; i <100; ++ i) {std :: ostringstream foo; foo << "barra"; std :: cout << foo.str() << "";} '. ¿Esto imprimirá: 'bar bar bar [...]' o 'bar barbar barbarbar [...]'? –