c++ primer中有一段话,在352页“一旦给ostream_iterator对象赋了一个值,写入就提交了.赋值后,没有办法再改变这个值.此外,ostream_iterator对象中每个不同的值都只能正好输出一次.”这句话我百思不得
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 13:32:26
c++ primer中有一段话,在352页“一旦给ostream_iterator对象赋了一个值,写入就提交了.赋值后,没有办法再改变这个值.此外,ostream_iterator对象中每个不同的值都只能正好输出一次.”这句话我百思不得
c++ primer中有一段话,在352页
“一旦给ostream_iterator对象赋了一个值,写入就提交了.赋值后,没有办法再改变这个值.此外,ostream_iterator对象中每个不同的值都只能正好输出一次.”
这句话我百思不得其解.
c++ primer中有一段话,在352页“一旦给ostream_iterator对象赋了一个值,写入就提交了.赋值后,没有办法再改变这个值.此外,ostream_iterator对象中每个不同的值都只能正好输出一次.”这句话我百思不得
这里确实有问题.
实际上,ostream_iterator作为一个输出流的迭代器,"一旦赋值,写入就提交,没法再改变,每个值都只输出一次",这些性质显然都应该满足.你想无论是屏幕输出还是文件输出,都是写入流了就不能改变并且都会输出一次,所以ostream_iterator当然也要满足这个性质.
我觉得你不明白的地方是,书里给的例子是 *out_iter++ = *in_iter++
那要是不++,多搞几次out_iter = 啥啥,起码语法上没有错误,不就算重复赋值了吗?
写个试试:
ostream_iterator 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的那个函数,基本就够了.