首頁 >後端開發 >C++ >如何重複使用ostringstreams?

如何重複使用ostringstreams?

Linda Hamilton
Linda Hamilton原創
2024-10-24 04:34:02970瀏覽

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