Très bien .. d'abord j'avais besoin de quelque chose qui fasse ce que cette question demande, mais j'en avais besoin RAPIDEMENT! Malheureusement, la "meilleure" façon est de près de 600 lignes de code !!! Pardonnez-lui le nom qui n'a rien à voir avec ce qu'il fait. Le nom propre était Integer64ToCharArray (valeur int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
N'hésitez pas à essayer de nettoyer ce code sans nuire aux performances.
Entrée: toute valeur 64 bits signée de la plage minimale à la plage maximale.
Exemple:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Production:
Test: 9223372036854775807
Test: -9223372036854775808
Tests de vitesse d'origine: ( Integer64ToCharArray (); )
Meilleur cas, valeur à 1 chiffre.
Boucles: 100000000, temps passé: 1381 (milli), temps par boucle 13 (nano)
Dans le pire des cas, valeur à 20 chiffres.
Boucles: 100 000 000, temps passé: 22 656 (milli), temps par boucle 226 (nano
Nouveaux tests de vitesse de conception: ( AddDynamicallyToBuffer (); )
Meilleur cas, valeur à 1 chiffre.
Boucles: 100 000 000, temps passé: 427 (milli), temps par boucle 4 (nano)
Pire cas 32 bits - Valeur à 11 chiffres.
Boucles: 100000000, temps passé: 1991 (milli), temps par boucle 19 (nano)
Pire cas négatif de 1 billion de dollars - Valeur à 14 chiffres.
Boucles: 100000000, temps passé: 5681 (milli), temps par boucle 56 (nano)
Cas pire de 64 bits - Valeur de 20 chiffres.
Boucles: 100 000 000, temps passé: 13 148 (milli), temps par boucle 131 (nano)
Comment ça fonctionne!
Nous effectuons une technique Divide and Conquer et une fois que nous avons maintenant la longueur maximale de la chaîne, nous définissons simplement chaque valeur de caractère individuellement. Comme indiqué dans les tests de vitesse ci-dessus, les plus grandes longueurs entraînent de lourdes pénalités de performances, mais c'est toujours beaucoup plus rapide que la méthode de boucle d'origine et aucun code n'a réellement changé entre les deux méthodes, à part la boucle n'est plus utilisée.
Dans mon utilisation, d'où le nom, je renvoie le décalage à la place et je ne modifie pas un tampon de tableaux de caractères plutôt que je commence à mettre à jour les données de sommet et la fonction a un paramètre supplémentaire pour le décalage afin qu'il ne soit pas initialisé à -1.