Comment réutiliser ostringstream ?
Pour éviter que les applications allouent fréquemment de la mémoire, vous souhaiterez peut-être effacer et réutiliser ostringstream (et son tampon sous-jacent). Pour réinitialiser un objet à son état initial, suivez ces étapes :
Utiliser clear et str
Dans le passé, des séquences de clear et str étaient utilisées pour y parvenir :
<code class="cpp">// 清除,因为 eof 或其他位可能仍然设置。 s.clear(); s.str("");</code>
Cela fonctionne à la fois pour les flux de chaînes d'entrée et de sortie.
Effacer et rechercher manuellement
Alternativement, vous pouvez effacer manuellement puis commencer par la recherche de séquence appropriée :
<code class="cpp">s.clear(); s.seekp(0); // 对于输出:将放置指针指向开头 s.seekg(0); // 对于输入:将获取指针指向开头</code>
Cela empêchera str Effectuez une réallocation, en écrasant plutôt tout ce qui se trouve actuellement dans le tampon de sortie. Le résultat est le suivant :
<code class="cpp">std::ostringstream s; s << "hello"; s.seekp(0); s << "b"; assert(s.str() == "bello");</code>
Pour les fonctions C, utilisez std::ends
Si vous souhaitez utiliser cette chaîne pour les fonctions C, vous pouvez utilisez std::ends, en mettant un null final, comme ceci :
<code class="cpp">std::ostringstream s; s << "hello"; s.seekp(0); s << "b" << std::ends; assert(s.str().size() == 5 && std::strlen(s.str().data()) == 1);</code>
std::ends est un vestige du std::strstream obsolète, qui est capable d'écrire directement dans ce que vous avez alloué le tableau de caractères de pile. Vous devez insérer manuellement un null de fin. Cependant, std::ends n'est pas obsolète, je pense parce qu'il est toujours utile dans la situation ci-dessus.
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!