【发布时间】:2012-02-20 01:19:11
【问题描述】:
我需要一个具有双向迭代器/适配器的输入文件流。
不幸的是,std::ifstream(和类似的)只能与std::istream_iterator 一起使用,这是一种不能向后移动的前向迭代器。 (或者我在这里弄错了吗?)
我可以简单地将整个文件加载到内存中,然后在数组上使用更强大的随机访问迭代器;但是我想避免这种情况,并且只阅读我真正需要的内容。我可能真的只需要文件的一小部分。
我可以使用 C stdio.h 函数以某种方式手动完成,但这会很痛苦。我基本上需要手动实现一个双向迭代器,考虑到它的所有规范。
我正在考虑研究 boost iostream 库,但该手册有点压倒性,我希望有人能帮我实现这个特定目标吗?或者也许有另一个已经存在的库可以完全满足我的需要?
我需要 boost xpressive 库的迭代器来解析我的文件,它期望迭代器可以递增和递减。如果我正在读取的文件被缓冲,我会很好,尽管这不是必需的。
有什么想法吗? 谢谢!
【问题讨论】:
-
您确定需要双向迭代器吗?如果一个前向迭代器就足够了,Boost.Spirit 已经为您服务了:Supporting Libraries -> The multi pass iterator。
-
能否不缓冲文件的一部分,对其进行操作,将其写入临时文件,然后获取文件的下一部分,等等...??
-
我认为你不能只对文件进行内存映射吗?当然便携性较差,但它为您提供随机访问并且它只读取您真正需要的文件部分(嗯,这些部分的邻域四舍五入到某个页面大小)。
-
@Steve :这正是我在我的代码中所做的,考虑到Boost.Interprocess 具有内存映射文件功能,可移植性就不再那么重要了。
-
如果你可以双向迭代,它不会是流。