首页  >  文章  >  后端开发  >  如何重用ostringstreams?

如何重用ostringstreams?

Linda Hamilton
Linda Hamilton原创
2024-10-24 04:34:02883浏览

How to Reuse ostringstreams?

如何重新使用 ostringstream?

为了避免应用程序频繁分配内存,您可能希望清除并重新使用 ostringstream(及其底层缓冲区)。要将对象重置到其初始状态,请遵循以下步骤:

使用 clear 和 str

过去,曾使用 clear 和 str 的序列来实现这一点:

<code class="cpp">// 清除,因为 eof 或其他位可能仍然设置。
s.clear();
s.str("");</code>

这适用于输入和输出 stringstream。

手动清除并查找

或者,您可以手动清除,然后将适当的序列查找开头:

<code class="cpp">s.clear();
s.seekp(0); // 对于输出:将放置指针指向开头
s.seekg(0); // 对于输入:将获取指针指向开头</code>

这将防止 str 执行某些重新分配,取而代之的是覆盖输出缓冲区中当前的任何内容。结果如下:

<code class="cpp">std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b";
assert(s.str() == "bello");</code>

对于 c 函数使用 std::ends

如果您想将该字符串用于 c-函数,可以使用 std::ends,放入一个终止空,如下所示:

<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 是已被弃用的 std::strstream 的一种残余,它能够直接写入您在堆栈上分配的 char 数组。您必须手动插入一个终止空。但是,std::ends 并未被弃用,我认为这是因为它在上述情况下仍然有用。

以上是如何重用ostringstreams?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn