c++流迭代器问题

ifstreaminfile("d:\\b.txt");istream_iterator<string>ifi(infile),eof;//ostream_iterato... ifstream infile("d:\\b.txt");
istream_iterator<string> ifi(infile),eof;
//ostream_iterator<string> ofi(cout," ");
//copy(ifi,eof,ofi);
//cout<<endl;
vector<string>vec(ifi,eof);
for(vector<string>::iterator it=vec.begin();it!=vec.end();++it)
cout<<*it<<" ";
加入注释行,for循环只执行一次,输出b.txt的第一个字符串(后面提示错误指针)。
求解释。
展开
 我来答
ziyang64
2011-03-01 · TA获得超过962个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:813万
展开全部
因为文件已经读到尾了,无法再读。
需要加上:
infile.clear();
infile.seekg( ios::beg );
但这样会多出一个值,除非重新生成ifi。
ifi = istream_iterator<string>(infile);
试试:
ifstream infile("d:\\b.txt");
istream_iterator<string> ifi(infile),eof;

ostream_iterator<string> ofi(cout," ");
copy(ifi,eof,ofi);
cout<<endl;

infile.clear();
infile.seekg( ios::beg );
ifi = istream_iterator<string>(infile);

vector<string>vec(ifi,eof);
for(vector<string>::iterator it=vec.begin();it!=vec.end();++it)
cout<<*it<<" ";
追问
(⊙v⊙)嗯,问题解决了,不过不是很明白
infile.seekg( ios::beg );这个语句什么意思?
还有为什么会多出一个值啊?
追答
infile.seekg( ios::beg );是把文件重新定位到开头,因为前面已经读过一次了。
至于多一个值的原因我也不明白。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式