2012-08-25 14 views
18

Quando è necessario utilizzare stringstream anziché string::append()? Supponiamo che sto per catenarmi solo archi.Quando dovrei usare una stringa invece di stringstream?

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

Oppure:

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

Quale dei due è più veloce?

risposta

17

Non so quale sarà più veloce, ma se dovessi indovinare direi che il tuo secondo esempio è, soprattutto dal momento che hai chiamato la funzione membro reserve per allocare uno spazio ampio per l'espansione.

Se si concatenano solo stringhe, utilizzare string::append (o string::operator+=).

Se si desidera convertire i numeri nella loro rappresentazione di stringa, nonché formattarli durante la conversione e quindi aggiungere i risultati di conversione insieme, utilizzare i flussi di stringa. Cito esplicitamente la parte di formattazione perché se non hai bisogno di formattazione, C++ 11 offre std::to_string che può essere usato per convertire i tipi numerici in stringhe.

14

string.append è molto più veloce. Soprattutto quando ti riservi.

Se si concatenano solo stringhe, utilizzare string.append. Vorrei usare solo stringstream quando ho bisogno di convertire automaticamente i non-stringhe in stringhe, ad esempio:

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

converte Qui stringstream automaticamente x in una stringa e lo aggiunge. Non ho bisogno di chiamare atoi. Stringstream convertirà automaticamente tutti i tipi di base automaticamente. È fantastico per questo scopo.

Anche se si sta solo dirigendo i dati nello stringstream per convertirlo in una stringa in seguito. Puoi usare ostringstream che è per l'output.

Spero che questo aiuti.

Problemi correlati