Pour C ++ 98 , il existe quelques options:
boost/lexical_cast
Boost ne fait pas partie de la bibliothèque C ++, mais contient de nombreuses extensions de bibliothèque utiles.
Le lexical_cast
modèle de fonction offre une forme pratique et cohérente pour prendre en charge les conversions courantes vers et depuis des types arbitraires lorsqu'ils sont représentés sous forme de texte.
- Documentation de 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;
}
Quant à l'exécution, l' lexical_cast
opération prend environ 80 microsecondes (sur ma machine) lors de la première conversion, puis accélère considérablement par la suite si elle est redondante.
itoa
Cette fonction n'est pas définie dans ANSI-C et ne fait pas partie de C ++, mais est prise en charge par certains compilateurs.
- cplusplus.com
Cela signifie que gcc
/ g++
ne peut pas compiler de code à l'aide de 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;
}
Aucun temps d'exécution à signaler. Je n'ai pas Visual Studio installé, qui est censé être capable de compiler itoa
.
sprintf
sprintf
est une fonction de bibliothèque standard C qui fonctionne sur les chaînes C, et est une alternative parfaitement valide.
Compose une chaîne avec le même texte qui serait imprimé si le format était utilisé sur printf, mais au lieu d'être imprimé, le contenu est stocké sous forme de chaîne C dans le tampon pointé par 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'en- stdio.h
tête peut ne pas être nécessaire. Quant à l'exécution, l' sprintf
opération prend environ 40 microsecondes (sur ma machine) lors de la première conversion, puis accélère considérablement par la suite si elle est effectuée de manière redondante.
stringstream
C'est le principal moyen de la bibliothèque C ++ de convertir des entiers en chaînes, et vice versa. Il existe des fonctions sœurs similaires stringstream
qui limitent davantage l'utilisation prévue du flux, telles que ostringstream
. L'utilisation ostringstream
indique spécifiquement au lecteur de votre code que vous avez uniquement l'intention d'utiliser l' <<
opérateur, essentiellement. Cette fonction est tout ce qui est particulièrement nécessaire pour convertir un entier en chaîne. Voir cette question pour une discussion plus élaborée.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
Quant à l'exécution, l' ostringstream
opération prend environ 71 microsecondes (sur ma machine), puis accélère considérablement par la suite si elle est redondante, mais pas autant que les fonctions précédentes .
Bien sûr, il existe d'autres options, et vous pouvez même en intégrer une dans votre propre fonction, mais cela offre un aperçu analytique de certaines des plus populaires.