如何重置迭代器状态或在其他istream_iterator
中使用istream_iterator
使用的fstream
obj。我在 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
没有处理失败和/或 eof 位
ofs.clear();
ofs.seekp(ios_base::beg);
关于在istream_iterator中使用后的c++ fstream obj回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51797424/