如何重複使用 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中文網其他相關文章!