0

我尝试使用迭代器迭代文本文件:

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

在第一行之后,它从文件中读取一些数据(它使用运算符 >> 表示 MyData 类型)。正如预期的那样。

不幸的是,在那之后内存消耗增加了,似乎istream_iterator试图将整个文件加载到内存中。几秒钟后(当抛出 out_of_memory 异常时)调试器进入第二行。但是文件读取失败,我无法读取更多内容。

问题

这是istream_iterator(将文件加载到内存中)的正确行为吗?

对于较小的文件(如 20MB),我没有观察到这一点。

也许对于这么大的文件我需要使用常见的getline方式?

4

1 回答 1

3

istream_iterator只是在类型上使用运算>>符。它在内存中最多保留一个该类型的实例。使用它时,您确实制作了实例的副本。我会怀疑(但没有看到代码)您的复制构造函数或析构函数有缺陷,或者您在>>运算符的某个地方泄漏了内存。如果问题与istream_iterator.

于 2013-04-12T10:14:29.433 回答