C++ STL中,为何copy函数会直接cout到屏幕上?

ostream_iterator<int,char>pp(cout,"");copy(one.begin(),one.end(),pp);就是把STL的链表内容复制到输出... ostream_iterator<int,char>pp(cout," ");
copy(one.begin(),one.end(),pp);

就是把STL的链表内容复制到输出流中。

但是,输出流应该是一个缓冲区啊。怎么没有cout<<他就能直接输出了呢?

有人说

调用copy所做的相当于

for (list<int>::iterator a = one.begin(); a != one.end(); a++)
*++pp = *a;

再由于*++pp = a;等价于cout << a << " ";以上代码又可以转化成

for (list<int>::iterator a = one.begin(); a != one.end(); a++)
cout << *a << " ";

但是我就不懂了,*++pp = a;怎么会等价于cout << a << " " ???
展开
 我来答
iicup
2014-08-30 · TA获得超过890个赞
知道小有建树答主
回答量:597
采纳率:85%
帮助的人:175万
展开全部
因为ostream_iterator重载了 = 运算符 和 * 运算符, 和++运算符.
*++pp = a; 等价于以下3步:

++pp; // 重载的++, 什么都不做, 直接忽略
*pp; // 重载的*, 什么都不做, 直接忽略, 还是返回pp自己
pp = a; // 重载的=, 调用了 cout << a << " "; , 其中后面的空格是定义pp的第二个参数.

因而最后,
*++pp = a; 就等价于 cout << a << " ";
更多追问追答
追问
这不太对啊,这是copy函数啊,是复制啊,按照你的说法,哪里来的复制?

结果不就成了cout<<输出了么,哪里来的复制?
追答
*++pp = a;

这个 = 就是复制,
但是ostream_iterator重载了=, 转成了 <<
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式