2010-09-25 17 views

回答

3

C++流是不能与C STDIO流兼容。换句话说,您不能使用带有FILE*fread的C++迭代器。但是,如果您使用C++ std::fstream工具以及istream_iterator,可以使用插入迭代器插入到C++容器中。

假设你有一个包含ASCII文本数字用空格隔开输入文件“input.txt中”,你可以这样做:

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <iterator> 

int main() 
{ 
std::ifstream ifs("input.txt"); 
std::vector<int> vec; 
    // read in the numbers from disk 
std::copy(std::istream_iterator<int>(ifs), std::istream_iterator<int>(), std::back_inserter(vec)); 
    // now output the integers 
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "\n")); 
} 
+0

您可以指定流的末尾便于阅读例如由5个整数? – user963241 2010-09-25 21:37:48

+0

是的,您可以使用包含计数参数的'std :: copy_n'。 – 2010-09-25 21:39:43

1

不,你不能。像这样存储int基本上是不可移植的。如果您使用big-endian机器编写文件并尝试使用little-endian机器读取它,您的代码将会中断。

但没有人阻止你。只需定义自己的前向迭代器即可从istream中读取二进制文件。您可能会希望停止使用FILE和fread/fopen/fclose函数,因为它们来自C时代。

,那么你就可以写:

std::copy_n(your_custom_forward_iterator, count, back_inserter<std::list<....> >); 
相关问题