使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
Approach to peek at next item (not just one char) in whitespace separated file using fstream
在尝试实现一个程序来处理文件中的一系列空格分隔值时,我遇到了一个问题,即我无法窥视>>运算符返回的输出,同时将其保留在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
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 为什么make_tie不是一件事
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 为什么这个案例陈述需要一个"if else"而不仅仅是一个"if"?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 为什么我们要做"INT_MAX/10"而不仅仅是INT_MAX?
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 我正在尝试制作一个程序,在添加 n 天(整数)后告诉一个人什么是一天(例如星期一等)
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 为什么 std::vector 需要 is_trivial 才能按位移动,而不仅仅是is_trivially_copya
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- ClCompile项目也是一项任务
- 在单个文件中收集公共包含项-这是一种好做法
- 多线程——希望是一项简单的任务