试试这个:
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;
}
Run Code Online (Sandbox Code Playgroud)
Kon*_*lph 15
distance在输入迭代器上将重复调用operator++.但是,此操作使迭代器的所有副本无效,因为它们都引用相同的基础流
这是合乎逻辑的:考虑迭代器表示的内容:输入流的当前状态.一旦你推进迭代器,那状态就会改变.因此,表示旧状态的所有其他迭代器现在指的是不再存在的状态.
这就是你看到这种行为的原因.
此外,从两个流运营商获得距离并不是一个有意义的操作,因为流没有固定长度:流表示瞬态.