c – 距离使我的迭代器“冻结”

试试这个:

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;
}
输入迭代器上的距离将重复调用操作符.但是,此操作使迭代器的所有副本无效,因为它们都引用相同的基础流

这是合乎逻辑的:考虑迭代器表示的内容:输入流的当前状态.一旦你推进迭代器,那状态就会改变.因此,表示旧状态的所有其他迭代器现在指的是不再存在的状态.

这就是你看到这种行为的原因.

此外,从两个流操作符获得距离并不是一个有意义的操作,因为流没有固定长度:流表示瞬态.

相关文章
相关标签/搜索