J'ai une situation où je dois traiter de gros (beaucoup de GB) quantités de données en tant que tel:initialisation std :: string de char * sans copie
- construire une grande chaîne en ajoutant beaucoup plus petit (C de type char *) les chaînes
- couper la chaîne
- convertir la chaîne en C++ const std :: string pour le traitement (lecture seule)
- répétition
da ta dans chaque itération sont indépendants. Ma question est, je voudrais minimiser (si possible éliminer) l'utilisation de la mémoire allouée par tas, comme c'est actuellement mon plus grand problème de performance. Y a-t-il un moyen de convertir une chaîne C (char *) en une chaîne stl C++ (std :: string) sans avoir besoin de std :: string pour allouer/copier les données en interne?
Sinon, pourrais-je utiliser des chaînes de caractères ou quelque chose de similaire pour réutiliser un grand tampon?
Edit: Merci pour les réponses, pour plus de clarté, je pense une question révisée serait:
Comment puis-je construire (via plusieurs ajouter ses) un stl C++ chaîne efficace. Et si vous effectuez cette action dans une boucle, où chaque boucle est totalement indépendante, comment puis-je réutiliser cet espace alloué.
Votre solution ressemble à ce qui suit, bien que, quand vous dites "vous pouvez simplement utiliser cette même chaîne C++", voulez-vous dire utiliser clear(), et continuer à construire la chaîne suivante? – Akusete
Cette solution est la plus simple pour moi d'adopter, actuellement, bien que je ne sache pas si la réutilisation est réellement spécifiée par la norme (bien que cela semble fonctionner sur mon implémentation) – Akusete
L'utilisation de clear() devrait fonctionner.Pour autant que je sache, clear() ne libère pas la mémoire utilisée par la chaîne, et n'affecte donc pas l'espace alloué par reserve(). –