c++ fstream obj 在 istream_iterator 中使用后回滚

c++ fstream obj rollback after using in istream_iterator

如何在其他 istream_iterator 中重置迭代器状态或使用 fstream obj,它已被 istream_iterator 使用。我在 fstream obj 上尝试了 seekp(ios_base::begin)clear() 方法,但这没有任何影响。

main(){
    fstream ofs{"219.txt"};
    fstream ofstl{"219-.txt"};

    ofstream rezult{"219-rezult.txt"};

    istream_iterator<string> begf{ofs};
    istream_iterator<string> begs{ofstl};
    istream_iterator<string> end;

    ostream_iterator<string> outr{rezult, "\n"};

    merge(begf, end, begs, end, outr);    // using iterators

    ofs.seekp(ios_base::beg);       // does not affect
    ofs.clear();                    // does not affect

    while(begf!=end){
        cout<<*begf;                // work only once
        begf++;
    }

    istream_iterator<string> begff{ofs};        // new iterator
    while(begff!=end){
        cout<<*begff;               // dont work even once
        begff++;
    }
}

更新:
如果我使用

ofs.clear();
ofs.seekp(ios_base::beg); 

然后继续使用相同的 istream_iterator 第一次和第二次取消引用给出相同的值,因此需要使用

begf++;

跳过重复项。

seekp 之前调用 clear,因为 seekp

未处理失败的 and/or eof 位
ofs.clear();
ofs.seekp(ios_base::beg);