背景:
C では、ostringstream オブジェクトは文字列操作タスクによく使用されます。ただし、これらのオブジェクトを継続的に使用すると、メモリ割り当てが繰り返されるため、パフォーマンスが低下する可能性があります。
Query:
この問題に対処するために、開発者は ostringstream オブジェクトをクリアして再利用する方法を模索する可能性があります。割り当ての必要性を減らすため。
解決策:
ostringstream オブジェクトを初期状態にリセットするには、次のシーケンスを利用します:
<code class="cpp">s.clear(); s.str("");</code>
代替アプローチ:
必要に応じて、ストリーム位置の手動クリアと取得を代わりに使用できます:
<code class="cpp">s.clear(); s.seekp(0); // For outputs: Set put pointer to beginning s.seekg(0); // For inputs: Set get pointer to beginning</code>
利点:
このアプローチは、新しいバッファーの内容を作成するのではなく、既存のバッファーの内容を上書きすることで、不必要な再割り当てを行います。
例:
次のコードを考えてみましょう:
<code class="cpp">std::ostringstream s; s << "hello"; s.seekp(0); s << "b"; assert(s.str() == "bello");</code>
追加の注意事項:
ヌル終端文字を必要とする 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::strstream の名残ですが、上記の例のような状況でも引き続き役立ちます。
以上がostringstream オブジェクトを効果的に再利用してバッファ管理を強化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。