ホームページ > バックエンド開発 > C++ > ostringstream を再利用するにはどうすればよいですか?

ostringstream を再利用するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-24 04:34:02
オリジナル
992 人が閲覧しました

How to Reuse ostringstreams?

ostringstream を再利用するにはどうすればよいですか?

アプリケーションがメモリを頻繁に割り当てることを避けるために、ostringstream (およびその基礎となるバッファ) をクリアして再利用することをお勧めします。オブジェクトを初期状態にリセットするには、次の手順に従います。

clear と str の使用

これまでは、clear と str のシーケンスを使用してこれを実現していました。

<code class="cpp">// 清除,因为 eof 或其他位可能仍然设置。
s.clear();
s.str("");</code>
ログイン後にコピー

これは、入力文字列ストリームと出力文字列ストリームの両方で機能します。

手動でクリアして検索

あるいは、手動でクリアしてから適切なシーケンス検索を開始することもできます:

<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-Functions では std::ends を使用します

C-Function でその文字列を使用したい場合は、std を使用できます。 :: ends は、次のように終端 null を入れます:

<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 に割り当てたものに直接書き込むことができます。配列。終端 null を手動で挿入する必要があります。ただし、 std::ends は非推奨ではなく、上記の状況ではまだ役立つためだと思います。

以上がostringstream を再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート