diff --git a/conversion/stringconversion.h b/conversion/stringconversion.h index 651b80e..f2f4885 100644 --- a/conversion/stringconversion.h +++ b/conversion/stringconversion.h @@ -421,13 +421,15 @@ template , std::is_unsigned> * = nullptr> StringType numberToString(IntegralType number, BaseType base = 10) { - std::size_t resSize = 0; - for (auto n = number; n; n /= static_cast(base), ++resSize) - ; - StringType res; - res.reserve(resSize); + auto resSize = std::size_t(); + auto n = number; do { - res.insert(res.begin(), digitToChar(static_cast(number % base))); + n /= static_cast(base), ++resSize; + } while (n); + auto res = StringType(resSize, typename StringType::value_type()); + auto resIter = res.end(); + do { + *(--resIter) = digitToChar(static_cast(number % static_cast(base))); number /= static_cast(base); } while (number); return res; @@ -443,24 +445,23 @@ template , std::is_signed> * = nullptr> StringType numberToString(IntegralType number, BaseType base = 10) { - const bool negative = number < 0; - std::size_t resSize; + const auto negative = number < 0; + auto resSize = std::size_t(); if (negative) { number = -number, resSize = 1; - } else { - resSize = 0; } - for (auto n = number; n; n /= static_cast(base), ++resSize) - ; - StringType res; - res.reserve(resSize); + auto n = number; do { - res.insert(res.begin(), - digitToChar(static_cast(number % static_cast(base)))); + n /= static_cast(base), ++resSize; + } while (n); + auto res = StringType(resSize, typename StringType::value_type()); + auto resIter = res.end(); + do { + *(--resIter) = digitToChar(static_cast(number % static_cast(base))); number /= static_cast(base); } while (number); if (negative) { - res.insert(res.begin(), '-'); + *(--resIter) = '-'; } return res; }