我有一个名为“wy.txt”的文件,它有一些这样的整数:
1 2 3 4 5 6 7 8
我使用istream_iterator<int>
来读取文件,并使用copy()
将数据输出到stdout流。
然后我使用相同的istream_iterator<int>
来构建名为vector
的{{1}},但v
的大小为1,你知道为什么吗?
这是我的代码:
v
编辑:
我已将代码更改为:
ifstream file("wy.txt");
istream_iterator<int> fileStream(file);
istream_iterator<int> eof;
// output: 1 2 3 4 5 6 7 8
copy(fileStream, eof, ostream_iterator<int>(cout, " "));
cout<<endl;
vector<int> v(fileStream, eof);
// output: 1
cout<<v.size()<<endl;
// output: 1
for_each(v.begin(), v.end(), [](const int & t){cout<<t<" ";});
cout<<endl;
......但它有同样的问题。
答案 0 :(得分:3)
解除引用istream_iterator<int>
的行为类似于从相关文件中提取int
:
int myInt;
myInt = *fileStream; // same as file >> myInt;
这也意味着您实际提取了文件的内容。您必须再次将输入光标设置在开头:
file.clear(); // clear the EOF flag
file.seekg(0);
答案 1 :(得分:0)
仅重置文件指针不起作用
使用clear
清除所有ifstream的内部错误状态标志状态。然后使用seekg
istream_iterator<int> fileStream(file);
istream_iterator<int> eof;
copy(fileStream, eof, ostream_iterator<int>(cout, " "));
cout<<endl;
file.clear();
file.seekg(0);
vector<int> v(fileStream, eof);
cout<<v.size()<<endl;