使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法

Approach to peek at next item (not just one char) in whitespace separated file using fstream

本文关键字:不仅仅是 一项 fstream 一个 方法 字符 文件 分隔 使用 空格      更新时间:2023-10-16

在尝试实现一个程序来处理文件中的一系列空格分隔值时,我遇到了一个问题,即我无法窥视>>运算符返回的输出,同时将其保留在ifstream中作为下一个返回的东西。

peek 运算符存在,但它只读取一个字符,我的值是不确定位数的位数。因此,这不是我特定问题的解决方案。然而,>>运算符更加灵活,允许检索下一个"项目",但不提供任何保持文件流不变的窥视功能。

我确实找到了另一种解决我特定问题的方法,但如果有人能告诉我是否有办法模拟偷看 fstream 内容,我将不胜感激。双向流似乎很难使用,我的印象是它可能需要重置缓冲区,尽管这可能是耗时的(所以我拒绝了这种方法,因为我知道这不是我知道如何轻松实现的东西,我不知道处理长数据集的效率如何(> 20,000 个空格分隔条目(。

此问题与在长文件内容流中查找连续重复项有关,以便我可以相应地调整条目的处理。就我而言,这个问题涉及数字,但它可以很容易地应用于空白分隔的单词列表。

例如,file1 可能包含 23 45 67 67 823 ...

换句话说,在我处理前 67 个之前,我想知道我连续有多少个,以便我可以相应地进行调整。就我而言,数字按升序排列。>>运算符可以检索下一个值,但它不再位于从该文件读取的输入文件流 (ifstream( 中。

我有一个解决方案,但想扩展我的知识,并可能决定该解决方案是否足够优雅以修改我的解决方案。谢谢。

处理数据的最简单方法是先将它们加载到内存中,然后执行所有处理。根据您的示例,20.000 个 2-5 位数字似乎不像是记忆杀手,我会这样做。

如果您负担不起内存消耗,您可以自行管理文件偏移量。如果要以任意方式(快进 + 正常读取(读取文件,则应通过 seek*(( 函数操作文件偏移量。

基本上,您保存当前文件偏移量,执行所需的所有读取,恢复偏移量。

如果您绝对需要最佳算法(性能(来查找下一个""或下一个数字,则可能需要在执行搜索时"最大程度地减少最大遗憾"。看看 : http://datagenetics.com/blog/july22012/index.html

相关文章: