Para o C ++ 98 , existem algumas opções:
boost/lexical_cast
O Boost não faz parte da biblioteca C ++, mas contém muitas extensões úteis da biblioteca.
O lexical_cast
modelo de função oferece uma forma conveniente e consistente para oferecer suporte a conversões comuns de e para tipos arbitrários quando elas são representadas como texto.
- Documentação da 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;
}
Quanto ao tempo de execução, a lexical_cast
operação leva cerca de 80 microssegundos (na minha máquina) na primeira conversão e, em seguida, acelera consideravelmente depois, se for feita de forma redundante.
itoa
Esta função não está definida no ANSI-C e não faz parte do C ++, mas é suportada por alguns compiladores.
- cplusplus.com
Isso significa que gcc
/ g++
não é possível compilar o código usando 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;
}
Sem tempo de execução para relatar. Eu não tenho Visual Studio instalado, que é supostamente capaz de compilar itoa
.
sprintf
sprintf
é uma função de biblioteca padrão C que funciona em cadeias C e é uma alternativa perfeitamente válida.
Compõe uma sequência com o mesmo texto que seria impresso se o formato fosse usado em printf, mas, em vez de ser impresso, o conteúdo é armazenado como uma sequência C no buffer apontado por 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;
}
O stdio.h
cabeçalho pode não ser necessário. Quanto ao tempo de execução, a sprintf
operação leva cerca de 40 microssegundos (na minha máquina) na primeira conversão e, em seguida, acelera consideravelmente depois, se for feita de forma redundante.
stringstream
Essa é a principal maneira da biblioteca C ++ de converter números inteiros em seqüências de caracteres e vice-versa. Existem funções irmãs semelhantes às stringstream
que limitam ainda mais o uso pretendido do fluxo, como ostringstream
. Usar ostringstream
especificamente informa ao leitor do seu código que você pretende apenas usar o <<
operador, essencialmente. Essa função é tudo o que é particularmente necessário para converter um número inteiro em uma string. Veja esta pergunta para uma discussão mais elaborada.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
Quanto ao tempo de execução, a ostringstream
operação leva cerca de 71 microssegundos (na minha máquina) e, em seguida, acelera consideravelmente depois se for feita de forma redundante, mas não tanto quanto as funções anteriores .
É claro que existem outras opções, e você pode até incluir uma delas em sua própria função, mas isso oferece uma visão analítica de algumas das populares.