c++ primer中有一段话,我不明白。谁给我解释一下啊。在352页
“一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出...
“一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法再改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出一次。”
这句话我百思不得其解。 展开
这句话我百思不得其解。 展开
展开全部
这里确实有问题。
实际上,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的那个函数,基本就够了。
实际上,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的那个函数,基本就够了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询