Wie kann man Ostringstream wiederverwenden?
Um zu vermeiden, dass Anwendungen häufig Speicher zuweisen, möchten Sie möglicherweise ostringstream (und den zugrunde liegenden Puffer) löschen und wiederverwenden. Um ein Objekt in seinen Ausgangszustand zurückzusetzen, führen Sie die folgenden Schritte aus:
Verwenden von „clear“ und „str“
In der Vergangenheit wurden hierfür Sequenzen aus „clear“ und „str“ verwendet:
<code class="cpp">// 清除,因为 eof 或其他位可能仍然设置。 s.clear(); s.str("");</code>
Dies funktioniert sowohl für Eingabe- als auch für Ausgabe-Stringstreams.
Manuell löschen und suchen
Alternativ können Sie manuell löschen und dann mit der entsprechenden Sequenzsuche beginnen:
<code class="cpp">s.clear(); s.seekp(0); // 对于输出:将放置指针指向开头 s.seekg(0); // 对于输入:将获取指针指向开头</code>
Dadurch wird Str. verhindert Führen Sie eine Neuzuweisung durch und überschreiben Sie stattdessen alles, was sich derzeit im Ausgabepuffer befindet. Das Ergebnis ist wie folgt:
<code class="cpp">std::ostringstream s; s << "hello"; s.seekp(0); s << "b"; assert(s.str() == "bello");</code>
Für C-Funktionen verwenden Sie std::ends
Wenn Sie diese Zeichenfolge für C-Funktionen verwenden möchten, können Sie dies tun Verwenden Sie std::ends und setzen Sie eine abschließende Null wie folgt:
<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 ist ein Überbleibsel des veralteten std::strstream, das direkt auf das schreiben kann, worauf Sie es zugewiesen haben das Stack-Char-Array. Sie müssen manuell eine abschließende Null einfügen. Allerdings ist std::ends meiner Meinung nach nicht veraltet, da es in der oben genannten Situation immer noch nützlich ist.
Das obige ist der detaillierte Inhalt vonWie kann man Ostringstreams wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!