我尝试使用迭代器遍历文本文件:
1) std::istream_iterator<MyData> itRecordStreamBegin(fileStream);
2) std::istream_iterator<MyData> itRecordStreamEnd;
在第一行之后,它从文件中读取一些数据(它使用运算符 >> 作为 MyData 类型)。正如预期的那样。
不幸的是,此后内存消耗增加,似乎 istream_iterator
试图将整个文件加载到内存中。几秒钟后(当抛出 out_of_memory 异常时)调试器进入第二行。但是文件读取失败,我无法再读取任何内容。
问题:
这是 istream_iterator
的正确行为(将文件加载到内存中)吗?
对于较小的文件(如 20MB),我没有观察到这一点。
也许对于这么大的文件我需要使用普通的 getline
方式?
最佳答案
istream_iterator
只是在类型上使用了 >>
运算符。它在内存中最多保留 一个 类型的实例。使用它时,您确实制作了实例的拷贝。我怀疑(但没有看到代码)您的复制构造函数或析构函数有缺陷,或者您在 >>>
运算符的某处泄漏了内存。如果问题与 istream_iterator
有关,我会感到非常惊讶。
关于c++ - std::istream_iterator,内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968621/