Има два начина за конвертиране на всякакви основни данни в низ.

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

В тази публикация ще анализирам кой е най-бързият за конвертиране на фундаментални данни в низ. Използвам google benchmark за измерване на часовата разлика. Във всички диаграми оста 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, ако имате boost в проекта си

Получено изображение: https://github.com/asit-dhal/BenchmarkViewer