Хорошо ... сначала мне нужно было что-то, что делало бы то, о чем спрашивал этот вопрос, но мне нужно было это БЫСТРО! К сожалению, «лучший» способ - это почти 600 строк кода !!! Простите имя того, что не имеет ничего общего с тем, что он делает. Имя собственное - Integer64ToCharArray (значение int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Не стесняйтесь попробовать очистить этот код, не снижая производительности.
Вход: любое знаковое 64-битное значение от минимального до максимального диапазона.
Пример:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Вывод:
Test: 9223372036854775807
Test: -9223372036854775808
Исходные тесты скорости: ( Integer64ToCharArray (); )
В лучшем случае 1-значное значение.
Циклов: 100000000, Затраченное время: 1381 (Милли), Время на цикл 13 (Нано)
В худшем случае 20-значное значение.
Циклов: 100000000, Затраченное время: 22656 (Милли), Время на цикл 226 (Нано
Новые тесты скорости проектирования: ( AddDynamicallyToBuffer (); )
В лучшем случае 1-значное значение.
Циклов: 100000000, Затраченное время: 427 (Милли), Время на цикл 4 (Нано)
32-битный наихудший случай - 11-значное значение.
Петли: 100000000, затраченное время: 1991 (милли), время на цикл 19 (нано)
Отрицательный 1 триллион наихудший случай - 14-значное значение.
Циклы: 100000000, затраченное время: 5681 (милли), время на цикл 56 (нано)
64-битный наихудший случай - 20-значное значение.
Циклов: 100000000, Затраченное время: 13148 (Милли), Время на цикл 131 (Нано)
Как это устроено!
Мы выполняем технику «разделяй и властвуй», и как только мы установим максимальную длину строки, мы просто устанавливаем значение каждого символа индивидуально. Как показано в приведенных выше тестах скорости, большая длина приводит к большим потерям производительности, но все же намного быстрее, чем исходный метод цикла, и на самом деле код между двумя методами не изменился, кроме того, цикл больше не используется.
В моем использовании, отсюда и название, я вместо этого возвращаю смещение, и я не редактирую буфер массивов символов, а я начинаю обновлять данные вершин, а функция имеет дополнительный параметр для смещения, поэтому он не инициализируется значением -1.