Maison  >  Article  >  développement back-end  >  Comment réutiliser les ostringstreams ?

Comment réutiliser les ostringstreams ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 04:34:02883parcourir

How to Reuse ostringstreams?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn