从文件中读取未知长度的 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<int> in_begin(inFile), in_end; std::vector<int> ints(in_begin, in_end);
C++03 MVP 消除:在第一个参数周围添加额外的括号:std::vector<int> ints((std::istream_iterator<int>(infile)), std::istream_iterator<int>());
。
而std::ifstream inFile(...);
也是函数声明。 :)以上是关于从文件中读取未知长度的 int 数组的主要内容,如果未能解决你的问题,请参考以下文章