Для C ++ 98 есть несколько вариантов:
boost/lexical_cast
Boost не является частью библиотеки C ++, но содержит много полезных расширений библиотеки.
lexical_cast
Шаблон функции предлагает удобную и последовательную форму для поддержки общих преобразований в и из произвольных типов , когда они представлены в виде текста.
- Документация 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;
}
Что касается времени выполнения, lexical_cast
операция занимает около 80 микросекунд (на моей машине) при первом преобразовании, а затем значительно ускоряется, если выполняется избыточно.
itoa
Эта функция не определена в ANSI-C и не является частью C ++, но поддерживается некоторыми компиляторами.
- cplusplus.com
Это означает, что gcc
/ g++
не может скомпилировать код, используя 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;
}
Нет времени выполнения, чтобы сообщить. У меня не установлена Visual Studio, которая, как сообщается, может компилироваться itoa
.
sprintf
sprintf
является стандартной библиотечной функцией C, которая работает со строками C и является вполне допустимой альтернативой.
Составляет строку с тем же текстом, который будет напечатан, если формат был использован в printf, но вместо печати содержимое сохраняется в виде строки C в буфере, указанном 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;
}
stdio.h
Заголовок не может быть необходимым. Что касается времени выполнения, sprintf
операция занимает около 40 микросекунд (на моей машине) при первом преобразовании, а затем значительно ускоряется, если выполняется избыточно.
stringstream
Это основной способ преобразования целых чисел в строки библиотеки C ++ и наоборот. Существуют аналогичные родственные функции, stringstream
которые дополнительно ограничивают предполагаемое использование потока, например ostringstream
. Использование, в ostringstream
частности, говорит читателю вашего кода, что вы <<
, по сути, собираетесь использовать только оператор. Эта функция - все, что особенно необходимо для преобразования целого числа в строку. Смотрите этот вопрос для более детального обсуждения.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
Что касается времени выполнения, ostringstream
операция занимает около 71 микросекунды (на моей машине), а затем значительно ускоряется, если выполняется избыточно, но не настолько, как предыдущие функции .
Конечно, есть и другие варианты, и вы можете даже включить один из них в свои собственные функции, но это предлагает аналитический взгляд на некоторые из популярных.