0

単一の文字列を更新する多くのループを実行するコードがあります。最後に、その文字列をファイルに保存したいと思います。

現在、その文字列をコンソールに出力しています。を使用してofstream、コンソールの代わりにファイルに書き込むことができます。

  • 更新する文字列を使用する代わりに、ファイル ストリームを直接使用します。
  • 代わりに文字列ストリームを使用し、最後にその文字列ストリームをファイル ストリームにコピーし て、ファイルに書き込みます。
  • 文字列の更新が完了したら、すぐにファイル ストリームを書き込む必要があります。

私のstd::string::max_sizeコンパイラでは: 4294967257 そして、生成できる文字列の最大サイズは、コンパイラの約半分ですmax_size

注: Solaris Unix を使用しています。

この文字列をファイルに書き込む最も効率的な方法は何ですか?

4

3 に答える 3

2

答えを知る方法はただ一つ。ケースのプロファイルを作成する必要があります。これは、ファイルの生成にかかる時間を測定することで簡単に実行できます。

于 2013-07-18T11:04:45.557 に答える
0

reserve と clear を使用して、同じ std::string オブジェクトをできるだけ再利用するようにしてください。文字列はメモリ割り当てをキャッシュします。{} 内の文字列は、ブロックに入るたびに新しい割り当てを行います。

非表示の一時文字列オブジェクトに注意してください。たとえば、 a が std::string の場合の a + b は、新しい割り当てで一時的な std::string オブジェクトを作成します。文字列を連結するには += を優先します。

C コードを使用して変換を実行します。ローカルに char バッファを作成して sprintf などを使用します。stringstream よりは高速ですが、間違いやすいので注意してください。

ファイルに書き込むときは、std::endl の代わりに "\n" を使用します。後者はフラッシュを引き起こすためです。

疫病のような文字列の流れを避けてください。それらは遅く、少なくとも Visual Studio の実装です。私は筋金入りのテキスト処理のためにそれらを試しましたが、わかっています。

もちろん、これはパフォーマンスが問題であると想定しています。軽い作業をしている場合は、stringstreams が最も簡単な解決策になる可能性があります。バグの可能性がはるかに少ないため、ハードコアな作業をしていないときはそれらを好みます。

于 2013-07-18T11:16:13.540 に答える