1

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

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++;

跳过重复项。

4

1 回答 1

0

调用clearbefore seekp,因为有 fail 和/或 eof 位未被处理seekp

ofs.clear();
ofs.seekp(ios_base::beg);
于 2018-08-11T07:59:45.383 回答