Есть два способа преобразовать любые фундаментальные данные в строку.
- std :: to_string
- std :: ostringstream
- boost :: lexical_cast
В этом посте я проанализирую, какой из них быстрее всего преобразует любые фундаментальные данные в строку. Я использую бенчмарк Google, чтобы измерить разницу во времени. На всех диаграммах по оси Y отложено время в наносекундах, а по оси X - как в реальном времени, так и в процессоре.
- type = int input_count = 1
Только одно преобразование, как std :: stringstream, так и std :: ostringstream, занимают примерно одно и то же время. boost :: lexical_cast самым быстрым. И std :: to_string находится между ними.
2. type = int input_count ›30
Здесь и std :: stringstream, и std :: ostringstream превосходят std :: to_string и boost :: lexical_cast. Вы можете получить лучший результат, повторно используя буфер std :: stringstream и std :: ostringstream.
std::ostringstream oss; oss.str(“”); oss.clear();
Создание потоковых объектов очень дорого. Таким образом, повторное использование буфера дает лучший результат.
3. type = double input_count = 1
Производительность очень похожа на целое число. Boost lexical_cast превосходит всех.
3. type = double input_count = 30
Для нескольких входов boost :: lexical_cast превосходит все остальные.
Итак, мои наблюдения
- Всегда используйте std :: to_string для преобразования любого отдельного значения в std :: string.
- В случае двойного используйте std :: string. Если вам нужна точность, используйте std :: ostringstream.
- Во всех остальных случаях используйте std :: ostringstream.
- Предпочитайте boost :: lexical_cast, если у вас есть ускорение в вашем проекте
Созданное изображение: https://github.com/asit-dhal/BenchmarkViewer