试试这个:
int main()
{
std::fstream fin_fout("some.txt");
std::istream_iterator<std::string> beg(fin_fout),end;
std::distance(beg,end);//if this line is commented out it works fine but not if is uncommented
while (beg != end)
{
cout << *beg;
++beg;
}
return 0;
}
答案 0 :(得分:15)
distance
将重复调用operator++
。但是,此操作使迭代器的所有副本无效,因为它们都引用相同的基础流
这是合乎逻辑的:考虑迭代器表示的内容:输入流的当前状态。一旦你推进迭代器,那状态就会改变。因此,表示旧状态的所有其他迭代器现在指的是不再存在的状态。
这就是你看到这种行为的原因。
与两个流运营商保持距离并不是一项有意义的操作,因为流没有固定的长度:流代表瞬态。