Quelqu'un peut-il battre les performances de mon code de conversion entier en std::string ?
Problème :
Conversion efficace un entier dans un std::string est un défi qui a déclenché la création de diverses méthodes. Cet article explore différentes approches et invite les soumissions à comparer leurs performances.
Méthodes :
Les méthodes courantes incluent :
-
Le "Voie C" : Utiliser un stringstream.
-
sprintf : souvent recommandé pour les performances.
-
Lexical_cast de Boost : possède sa propre implémentation qui ne repose pas sur des stringstreams.
-
Algorithmes de Ben : optimisés pour les ordinateurs de bureau et embarqués systèmes.
-
ltoa (non standard) : Largement disponible, mais son utilisation peut être limitée.
Règles :
Les soumissions doivent respecter des directives spécifiques :
- Convertir à la fois signé et non signé Entiers de 32 bits en décimales.
- Produisez la sortie sous forme de std::string.
- Assurez-vous de la compatibilité avec les threads et les signaux.
- Supposez un jeu de caractères ASCII.
- Gérez correctement INT_MIN sur une machine à complément à deux.
- La sortie doit être identique à la version canonique C en utilisant un stringstream.
- Compiler et exécuter sur VC 2010 et g .
Résultats :
Le les soumissions gagnantes ont démontré des améliorations significatives des performances :
- Code d'Eugene Smith : 8 fois plus rapide que sprintf sur g (http://ideone.com/0uhhX)
- Code de Timo : 15 fois plus rapide que sprintf sur Visual C (http://ideone.com/VpKO3)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!