从文件中读取未知长度的 int 数组

Posted

技术标签:

【中文标题】从文件中读取未知长度的 int 数组【英文标题】:read int array of unknown length from file 【发布时间】:2013-01-04 17:55:08 【问题描述】:

如何从文件中读取长度未知的整数数组? 我看不到获取数组大小的方法,所以我尝试了一些临时字符串, 但是我的代码爆炸了……

有更好的想法吗?

【问题讨论】:

尝试使用std::vector<std::string>std::vector<int> @GuySirton, ***.com/questions/5605125/… @GuySirton:这绝对是个糟糕的建议。 eof 几乎永远不会正确。 @KerrekSB:这是伪代码,继续执行此操作直到数据用完。我明白你的观点这可能是错误的/令人困惑的,关键是为了说明在你有东西要阅读的时候继续阅读并推入一个向量(是的,实际代码会有所不同)。 顺便说一句,如果文件包含整数并且您想要所有整数,则可以通过获取文件大小并除以sizeof(int) 来获得数字。 【参考方案1】:

使用std::vector:

std::ifstream inFile(fileName);

std::vector<int> ints
    std::istream_iterator<int>(inFile),
    std::istream_iterator<int>()
;

std::vector 提供动态存储,因此它可以根据需要调整大小以适应它所拥有的内容。我所做的只是利用构造函数,它接受一对迭代器并循环遍历它们,从头到尾,并将值复制到向量中。我正在使用的迭代器将从文件中读取整数,直到无法读取,就像到达文件末尾的情况一样。我还使用统一初始化来避免最麻烦的解析,这是使用这种形式的构造函数时容易犯的错误。

【讨论】:

这遭受了最麻烦的解析。 ints 是一个函数声明。 @BenjaminLindley,哎呀,一秒钟。 就我个人而言,我一直觉得这更具可读性,而且打字更少:std::istream_iterator&lt;int&gt; in_begin(inFile), in_end; std::vector&lt;int&gt; ints(in_begin, in_end); C++03 MVP 消除:在第一个参数周围添加额外的括号:std::vector&lt;int&gt; ints((std::istream_iterator&lt;int&gt;(infile)), std::istream_iterator&lt;int&gt;()); std::ifstream inFile(...);也是函数声明。 :)

以上是关于从文件中读取未知长度的 int 数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言中从广西读入未知长度的数字,放个数组

在C中动态分配的从文件读取的未知长度字符串(必须防止从文件中读取数字)

合并流以及已知文件流长度和未知文件长度的文件流读取方法

c语言中如何求数组长度

如何读取长度未知的输入字符串?

Autowire List<List<String>> 超出具有未知键长度的属性文件