c++ primer中的一段话,我已经看了16遍了,还是看不懂?谁帮我解释一下。
发布网友
发布时间:2022-07-28 15:03
我来回答
共4个回答
热心网友
时间:2023-11-08 17:22
这里确实有问题。
实际上,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的那个函数,基本就够了。
热心网友
时间:2023-11-08 17:22
你可以这么理解,class X类的友元函数void f()和友元类class Y的声明虽然是写在X类内部,但它相当于在class X类外面也做了一次函数void f()和类class Y的声明。
热心网友
时间:2023-11-08 17:23
看起好痛苦
热心网友
时间:2023-11-08 17:23
靠,你发的图看不清啊