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);
如何在其他 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
ofs.clear();
ofs.seekp(ios_base::beg);