0

イテレータを使用してテキスト ファイルを反復処理しようとしています。

1) std::istream_iterator<MyData> itRecordStreamBegin(fileStream);
2) std::istream_iterator<MyData> itRecordStreamEnd; 

最初の行の後、ファイルからいくつかのデータを読み取ります (MyData 型に演算子 >> を使用します)。予想通り。

残念ながら、その後メモリ消費量が増加し、istream_iteratorファイル全体をメモリにロードしようとしたようです。数秒後 (out_of_memory 例外がスローされた場合)、デバッガーは 2 行目に移動します。しかし、ファイルの読み取りに失敗し、それ以上何も読み取れません。

質問:

istream_iteratorこれは(ファイルをメモリにロードするための) 正しい動作ですか?

小さなファイル (20MB など) の場合、これは観察されません。

たぶん、そのような大きなファイルの場合、一般的なgetline方法を使用する必要がありますか?

4

1 に答える 1

3

型で演算子をistream_iterator使用するだけです。型のインスタンスを>>最大1 つメモリに保持します。それを使用するとき、インスタンスのコピーを作成します。コピー コンストラクタまたはデストラクタに欠陥があるか、>>オペレータのどこかでメモリ リークが発生していると思われます (ただし、コードは表示されません)。問題がに関連している場合、私は非常に驚くでしょうistream_iterator

于 2013-04-12T10:14:29.433 に答える