Есть два способа преобразовать любые фундаментальные данные в строку.

  1. std :: to_string
  2. std :: ostringstream
  3. boost :: lexical_cast

В этом посте я проанализирую, какой из них быстрее всего преобразует любые фундаментальные данные в строку. Я использую бенчмарк Google, чтобы измерить разницу во времени. На всех диаграммах по оси Y отложено время в наносекундах, а по оси X - как в реальном времени, так и в процессоре.

  1. 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