c++ primer中有一段话,我不明白。谁给我解释一下啊。在352页

“一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出... “一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出一次。”
这句话我百思不得其解。
展开
 我来答
missiondone
2010-11-26 · TA获得超过943个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:135万
展开全部
这里确实有问题。

实际上,ostream_iterator作为一个输出流的迭代器,"一旦赋值,写入就提交,没法再改变,每个值都只输出一次",这些性质显然都应该满足。你想无论是屏幕输出还是文件输出,都是写入流了就不能改变并且都会输出一次,所以ostream_iterator当然也要满足这个性质。

我觉得你不明白的地方是,书里给的例子是 *out_iter++ = *in_iter++
那要是不++,多搞几次out_iter = 啥啥,起码语法上没有错误,不就算重复赋值了吗?
写个试试:
ostream_iterator<double> os_iter(cout, " ~ ");
*os_iter = 1.0;
os_iter++;
*os_iter = 2.0;
*os_iter = 3.0;
发现,输出是 1 ~ 2 ~ 3 ~,说明不++也没用,编译器自动就给迭代器后移了。

所以,我觉得基本可以理解成,*out_iter++ = 啥啥 是比较规范的写法,直接都来 *out_iter = 啥啥 也没啥问题,编译器也会自动处理,stl 毕竟还是比较健壮的。

感觉这里的标准确实有些瑕疵,毕竟ostream_iterator只是一个对ostream的包装,而因为迭代器和stream的性质的区别,没法规定得十分完美。好在一般要用到ostream_iterator的时候都是copy vector 到 ostream_iterator的那个函数,基本就够了。
rkvvl20
2010-11-27 · TA获得超过389个赞
知道答主
回答量:211
采纳率:0%
帮助的人:113万
展开全部
用Cfree 吧,Visual Studio 太大了。
书看一遍,每个例子都去写一遍,语法应该是没有问题了的。
你的串号我已经记下,采纳后我会帮你制作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式