Per C ++ 98 , ci sono alcune opzioni:
boost/lexical_cast
Boost non fa parte della libreria C ++, ma contiene molte utili estensioni di libreria.
Il lexical_cast
modello di funzione offre una forma comoda e coerente per supportare conversioni comuni da e verso tipi arbitrari quando sono rappresentati come testo.
- Documentazione di Boost
#include "boost/lexical_cast.hpp"
#include <string>
int main() {
int x = 5;
std::string x_str = boost::lexical_cast<std::string>(x);
return 0;
}
Per quanto riguarda il runtime, l' lexical_cast
operazione richiede circa 80 microsecondi (sulla mia macchina) sulla prima conversione, quindi accelera notevolmente dopo se eseguita in modo ridondante.
itoa
Questa funzione non è definita in ANSI-C e non fa parte di C ++, ma è supportata da alcuni compilatori.
- cplusplus.com
Ciò significa che gcc
/ g++
non è possibile compilare il codice utilizzando itoa
.
#include <stdlib.h>
int main() {
int x = 5;
char * x_str = new char[2];
x_str = itoa(x, x_str, 10); // base 10
return 0;
}
Nessun runtime da segnalare. Non ho installato Visual Studio, che secondo quanto riferito è in grado di compilare itoa
.
sprintf
sprintf
è una funzione di libreria standard C che funziona su stringhe C ed è un'alternativa perfettamente valida.
Composta una stringa con lo stesso testo che verrebbe stampato se il formato fosse usato su printf, ma invece di essere stampato, il contenuto viene memorizzato come stringa C nel buffer puntato da str.
- cplusplus.com
#include <stdio.h>
int main() {
int x = 5;
char * x_str = new char[2];
int chars_written = sprintf(x_str, "%d", x);
return 0;
}
L' stdio.h
intestazione potrebbe non essere necessaria. Per quanto riguarda il runtime, l' sprintf
operazione richiede circa 40 microsecondi (sulla mia macchina) sulla prima conversione, quindi accelera notevolmente dopo se eseguita in modo ridondante.
stringstream
Questo è il modo principale della libreria C ++ di convertire numeri interi in stringhe e viceversa. Esistono funzioni sorelle simili a quelle stringstream
che limitano ulteriormente l'uso previsto del flusso, come ad esempio ostringstream
. L'uso ostringstream
specifico indica al lettore del codice che si intende utilizzare l' <<
operatore, in sostanza. Questa funzione è tutto ciò che è particolarmente necessario per convertire un numero intero in una stringa. Vedi questa domanda per una discussione più elaborata.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
Per quanto riguarda il runtime, l' ostringstream
operazione richiede circa 71 microsecondi (sulla mia macchina), quindi accelera considerevolmente in seguito se eseguita in modo ridondante, ma non tanto quanto le funzioni precedenti .
Ovviamente ci sono altre opzioni e puoi persino includerne una nella tua funzione, ma ciò offre uno sguardo analitico ad alcune di quelle popolari.