我尝试使用迭代器迭代文本文件:
1) std::istream_iterator<MyData> itRecordStreamBegin(fileStream);
2) std::istream_iterator<MyData> itRecordStreamEnd;
在第一行之后,它从文件中读取一些数据(它使用运算符&gt;&gt;表示MyData类型)。正如所料。
不幸的是,在内存消耗上升之后,似乎istream_iterator
试图将整个文件加载到内存中。几秒钟后(当抛出out_of_memory异常时)调试器进入第二行。但是文件读取失败了,我再也看不懂了。
问题:
这是istream_iterator
的正确行为(将文件加载到内存中)吗?
对于较小的文件(例如20MB),我没有观察到这一点。
对于这么大的文件,我需要使用常见的getline
方式?
答案 0 :(得分:3)
istream_iterator
只在该类型上使用>>
运算符。它最多保留内存中一个类型的实例。使用它时,您执行制作实例的副本。我怀疑(但没有看到代码)您的复制构造函数或析构函数有缺陷,或者您在>>
运算符中的某处泄漏内存。如果问题与istream_iterator
相关,我会感到非常惊讶。