请教一个关于输入输出流迭代器的问题。

helww 2011-04-28 02:19:54
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>

using namespace std;

//直接从输入流中读取数据到输出流中,不经过中间层
//出了些问题,输入str1,不输出,然后输入str2,输出第一次输入的str1,不清楚为什么第一次输入后不输出任何东西。
int main()
{
ostream_iterator<string> out_iter(cout,"\n");
istream_iterator<string> in_iter(cin);
istream_iterator<string> eof;
while(in_iter!=eof)
*(out_iter++) = *(in_iter++);
cin.clear();
return 0;
}

输出:
abc //input1
bcd //input2
abc //output1
cde //input3
bcd //output2
def //input4
cde //output3
^Z //input5
def //output4
请按任意键继续. . .

输入str1,不输出,然后输入str2,输出第一次输入的str1,不清楚为什么第一次输入后不输出任何东西?请大家多多指导。
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
helww 2011-04-28
  • 打赏
  • 举报
回复
谢谢1楼和3楼的朋友。

总结归纳之后的文章请参阅:http://blog.csdn.net/helww/archive/2011/04/28/6370841.aspx
机智的呆呆 2011-04-28
  • 打赏
  • 举报
回复
lz看一下这两个流的源代码就清楚了。
机智的呆呆 2011-04-28
  • 打赏
  • 举报
回复
istream_iterator<string> in_iter(cin);时引发一次从缓冲区读数据的操作 (starus A)
*(out_iter++) = *(in_iter++);中operator++(int)函数中也引发了一次从缓冲区读数据的操作(starus B)
但是返回的是先前第一次读数据的操作的流迭代,然后赋值给out_iter,out_iter.operator=,引发一次把数据刷新到缓冲区得操作,即输出是(starus A)输入时的数据,同理再下次input时输出是(starus B)的数据
helww 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q191201771 的回复:]
*out_iter = *in_iter;
++in_iter;
[/Quote]

我刚才试了一下
*out_iter = *(in_iter++);

这种情况下和之前的*(out_iter++) = *(in_iter++); 是等价的效果。

请问你的代码和我的代码类似,却为什么你的代码可以正常工作呢?两者之间的差别在哪里?
就想叫yoko 2011-04-28
  • 打赏
  • 举报
回复
*out_iter = *in_iter;
++in_iter;

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧