免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1572 | 回复: 1
打印 上一主题 下一主题

copy函数里面为什么可以用Ctrl+Z可以停止cin的输入? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-27 22:48 |只看该作者 |倒序浏览
几行程序,几个疑难问题。
下面这几行程序的作用是,当我输入若干个数字以后,按下Ctrl+Z然后连续两次回车,cin就被中止了, cout输出全部内容。
        istream_iterator<int>is(cin);
        istream_iterator<int>intEOF;
    vector<int>v;
        copy(is,intEOF,back_inserter(v));
        copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));

我的问题是:
(1)为什么不是一按下Ctrl+Z,cin就被中止,程序继续执行?
(2)为什么Ctrl+Z以后要再按下两次回车,而不是一次?
因为我发现,如果Ctrl+Z以后,不按回车再继续输入数字,效果是,按下一次回车前输入的数字被忽略,但是cin继续执行。
(3)为什么是Ctrl+Z而不是Ctrl+C, Ctrl+C我发现程序就退出了。Ctrl+Z有什么特殊的含义么?
(4)为什么copy(is,intEOF,back_inserter(v));当中,v的操作是用back_inserter,而不能用v.back()?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2012-02-27 23:58 |只看该作者
Windows吧?

3) Ctrl-C是终止,Ctrl-Z是Windows下的EOF……
1) 需要按下Enter,Ctrl-Z才会被送入程序…… 当作一个普通字符'\x1a'……
并不像Ctrl-C或Ctrl-S那样由cmd特殊处理
2) Ctrl-C或者'\x1a'需要是一行的第一个字符…… 才会被解释为EOF……
4) v.back() 是返回v的最后一个元素, back_inserter(v) 是构造一个back_inserter_iterator……

写入该迭代器, *it = x , 相当于 v.push_back(x) 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP