如何重新使用 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中文网其他相关文章!