鱼C论坛

 找回密码
 立即注册
查看: 1759|回复: 4

[已解决]新手的困惑之istream_iterator

[复制链接]
发表于 2022-12-13 04:13:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近学习看书,看到iostream Iterator这一部分。
大致内容是,把键盘流输入的字符内容,放到可自动扩展的容器vector对象里。
里面有这样两段代码,如下:
istream_iterator<string> is (cin); //这句我理解是定义一个流类型的游标is 用标准键盘缓冲区cin 初始化它。
istream_iterator<string> eof;  //这句代码我很不好理解?为啥还要单独定义一个对象表示结尾,而不用EOF,还有这个定义的eof它的值是多少?是0吗?

至此:我对第一行代码的理解方式不知对否?

   第二行代码我很困惑,假如:中途把上面的is(cin)改成别的,虽然我不知道还有啥,但我觉得应该还有其他可替代cin的流,比如改成is(xx)了,那么
   下面的eof是不是也就跟着变成了xx的尾部游标指针了呢?这个eof又是如何知道is改变了呢?

      学习当中的一些困惑,还请大虾们,不吝赐教,解答矫正一下我的理解方式!

                                                                                                     此致敬谢!!
                                                                                                                                卯时
最佳答案
2022-12-13 14:22:42
你的理解应该是对的;
为啥还要单独定义一个对象表示结尾,而不用EOF

我的理解是C++里EOF仅仅代表一个-1,is作为istreram_iterator的对象,它是一个指针,当他到达结尾时返回的可能不是-1;
下面的eof是不是也就跟着变成了xx的尾部游标指针了呢?

eof只是表示一个流的结尾,他不会改变,只要is(xx)的类型和eof的类型相同,eof就可以表示xx的尾部游标指针
这个eof又是如何知道is改变了呢?

eof不知道is的值是否改变,eof只是一个表示到达结尾的状态,当is到达结尾时is和eof是相等的;
关于eof的值是什么,可以去看看istream_iterator类的实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-13 14:22:42 | 显示全部楼层    本楼为最佳答案   
你的理解应该是对的;
为啥还要单独定义一个对象表示结尾,而不用EOF

我的理解是C++里EOF仅仅代表一个-1,is作为istreram_iterator的对象,它是一个指针,当他到达结尾时返回的可能不是-1;
下面的eof是不是也就跟着变成了xx的尾部游标指针了呢?

eof只是表示一个流的结尾,他不会改变,只要is(xx)的类型和eof的类型相同,eof就可以表示xx的尾部游标指针
这个eof又是如何知道is改变了呢?

eof不知道is的值是否改变,eof只是一个表示到达结尾的状态,当is到达结尾时is和eof是相等的;
关于eof的值是什么,可以去看看istream_iterator类的实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 20:20:10 | 显示全部楼层
lvk 发表于 2022-12-13 14:22
你的理解应该是对的;

我的理解是C++里EOF仅仅代表一个-1,is作为istreram_iterator的对象,它是一个指 ...

[eof不知道is的值是否改变,eof只是一个表示到达结尾的状态,当is到达结尾时is和eof是相等的;]
这个说的很好,很是受用!!感谢指点,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-31 20:28:44 | 显示全部楼层
按照【lvk】的意思搜了一下,原来:“istream_iterator        构造一个流结尾迭代器作为默认的 istream_iterator,或作为一个 istream_iterator,以便初始化为它开始读取的迭代器流类型。”
意思是:这个迭代器,他默认构造的 对象 是流结尾 迭代器;这次明白了,感谢【lvk】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 20:33:41 | 显示全部楼层
pigpigrun 发表于 2022-12-31 20:28
按照【lvk】的意思搜了一下,原来:“istream_iterator        构造一个流结尾迭代器作为默认的 istream_iterator ...

不用谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表