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

Comment réutiliser les ostringstreams ?

Linda Hamilton
Libérer: 2024-10-24 04:34:02
original
1031 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal