2012-08-25 14 views
18

¿Cuándo debo usar stringstream en lugar de string::append()? Supongamos que voy a catenear solo cadenas.¿Cuándo debería usar string en lugar de stringstream?

stringstream ss; 
ss << str1 << "str2" << ... 
Write(ss.str()); 

O:

string str; 
str.reserve(10000); 
str.append(str1); 
str.append("str2"); 
... 
Write(str); 

¿Cuál de ellos es más rápido?

Respuesta

17

No sé cuál será más rápido, pero si tuviera que adivinar, diría que su segundo ejemplo es, especialmente desde que llamó a la función de miembro reserve para asignar un gran espacio para la expansión.

Si solo está concatenando cadenas use string::append (o string::operator+=).

Si va a convertir números a su representación de cadena, así como a formatearlos durante la conversión, y luego anexar los resultados de la conversión, use cadenas de caracteres. Menciono explícitamente la parte de formateo porque si no necesita formatear C++ 11 ofrece std::to_string que se puede usar para convertir tipos numéricos en cadenas.

14

string.append es mucho más rápido. Especialmente cuando reserva

Si concatenas solo cadenas, usaría string.append. Yo sólo uso stringstream cuando necesito para convertir automáticamente los no-secuencias de cadenas por ejemplo:

const int x(42); 
stringstream ss; 
ss << "My favorite number is: " << x << std::endl; 

convierte automáticamente Aquí stringstream x en una cadena y lo anexa. No necesito llamar a Atoi. Stringstream convertirá automáticamente todos los tipos básicos. Es grandioso para ese propósito.

Además, si solo va a dirigir datos al stringstream para convertirlo a una cadena más adelante. Puede usar ostringstream que es para salida.

Espero que ayude.

Cuestiones relacionadas