在从文件读取数据到STL容器中读取数据时,是否可以使用Insert Iterators
?从文件读取时使用插入迭代器
例如:
FILE *stream;
fread(back_inserter(std::list), sizeof(int), 1, stream);
在从文件读取数据到STL容器中读取数据时,是否可以使用Insert Iterators
?从文件读取时使用插入迭代器
例如:
FILE *stream;
fread(back_inserter(std::list), sizeof(int), 1, stream);
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"));
}
不,你不能。像这样存储int基本上是不可移植的。如果您使用big-endian机器编写文件并尝试使用little-endian机器读取它,您的代码将会中断。
但没有人阻止你。只需定义自己的前向迭代器即可从istream中读取二进制文件。您可能会希望停止使用FILE和fread/fopen/fclose函数,因为它们来自C时代。
,那么你就可以写:
std::copy_n(your_custom_forward_iterator, count, back_inserter<std::list<....> >);
您可以指定流的末尾便于阅读例如由5个整数? – user963241 2010-09-25 21:37:48
是的,您可以使用包含计数参数的'std :: copy_n'。 – 2010-09-25 21:39:43