0

これは私が従わなければならない要件です:

単語を保持する C スタイルまたは C++ スタイルの文字列があります。各単語のカウントを保持する int。これらの両方を保持する構造体またはクラス。この構造体/クラスは STL リストに挿入されます。ファイルから読み取ったテキスト行を保持するために、C スタイルまたは C++ スタイルの文字列も必要です。割り当て仕様の単語定義に従って、この行を単語に解析します。

最初の部分は問題ないように見えますが、2 番目の部分では、行を読んでそれを単語に解析することについての要点がまだわかりません。を使用してテキスト ファイルから単語を直接読み取るよりも効率的ですか?

4

3 に答える 3

2

効率は、単語の定義 (代入仕様に由来します) によって異なります。単語の開始/終了位置 (つまり、単語に属するもの) を決定するために行を複数回調べる必要がある場合は、より効率的です。行をメモリに保持し、ディスクから複数回読み取りを実行するのが効率的です (ただし、パフォーマンスへの影響は I/O キャッシュによって軽減できます)。

パフォーマンスの向上がなくても、これは宿題なので、1) ファイルから文字列 (行) を読み取る方法。2) メモリ内の文字列を解析する方法。2 つの目標を同時に達成するには、次の要件があります。

于 2012-04-27T10:15:34.757 に答える
0

ユースケースによっては、ファイルを 1 行ずつ読み取ると便利な場合があります。

最初にメモリ内のファイル全体を読み取り、後で解析しても、メモリ使用量は最小限に抑えられません。プログラムの実行に必要なメモリは、少なくともファイルのサイズです。入力ファイルがプログラムで使用できるメモリに比べて大きい場合、ファイル全体を格納するのに十分なメモリを割り当てることができません (何が起こるかを確認するには、20GB の文字列を割り当ててみてください)。

一方、行ごとに読み取る場合は、一度に 1 行分のサイズのメモリしか必要としません。前の行に割り当てられたメモリをすぐに解放できます。

したがって、行ごとの解析は次の場合に役立ちます。

  • 入力ファイルが大きすぎてメモリに完全に収まりません
  • 各行のサイズは十分に小さい (ファイルが 1 つの大きな行で構成されている場合、行ごとに読むのは役に立たない)
于 2012-04-27T10:54:47.407 に答える
0

を使用してファイルから行ごとに読み取りfstream、スペースをチェックしてloop.

于 2012-04-27T10:16:33.660 に答える