Réutilisation d'un ostringstream
Dans les efforts visant à optimiser l'allocation des ressources, il peut être nécessaire de réinitialiser un ostringstream à son état initial pour éviter une allocation excessive allocations. Cet article aborde ce problème en explorant différentes méthodes pour effacer et réutiliser un ostringstream.
Réinitialiser l'objet
Pour rétablir l'ostringstream à son état d'origine, une séquence d'effacement et str peuvent être utilisés :
<code class="cpp">// Clear any flags (e.g., eof) s.clear(); // Empty the buffer s.str("");</code>
Cette approche efface efficacement le tampon et réinitialise les pointeurs de flux. Alternativement, un effacement manuel peut être effectué suivi d'une recherche jusqu'au début :
<code class="cpp">// Clear any flags s.clear(); // Reset put pointer (for output streams) s.seekp(0); // Reset get pointer (for input streams) s.seekg(0);</code>
Cette méthode évite les réallocations inutiles en écrasant le contenu du tampon existant. Par exemple :
<code class="cpp">std::ostringstream s; s << "hello"; s.seekp(0); s << "b"; assert(s.str() == "bello");</code>
Pour utiliser la chaîne pour les fonctions de style C, std::ends peut être utilisé pour ajouter un caractère nul de fin :
<code class="cpp">// Append a terminating null s << std::ends; assert(s.str().size() == 5 && std::strlen(s.str().data()) == 1);</code>
Bien que std::ends est un vestige du std::strstream obsolète, il reste utile dans les situations où il est nécessaire de travailler avec des tableaux de caractères de style C sans terminaison nulle explicite.
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!