初学者提问,请帮看下两段代码的执行的时候有什么不同
菜鸟提问,请帮看下两段代码的执行的时候有什么不同?
1.第一段代码
2.第二段代码
【输入】hello world 回车
【输出】
第一段代码输出:
hello
第二段代码输出:
hello
world
【问题】
到底区别在哪?请详细解释下,谢谢!
------解决方案--------------------
第一个, 先输出, 再移动.
第二个, 先移动, 再输出.
第二个等价于:
out_temp = out_iter;
in_temp = in_iter;
++out_iter;
++in_iter;
*out_temp = *in_temp; // 注意 ++ 在 = 之前. 第一个是 ++ 在 = 之后.
------解决方案--------------------
楼上正解。
*out_iter++ = *in_iter++;的步骤是先移动,再输出,于是在in_iter向后移动时,发现后面输入缓冲区空,又没有到文件尾,于是开始等待用户输入,而这时最后一个单词还没有输出。
一般输入输出流迭代器更适合用于处理文本文件而不是控制台IO,上面两段代码在处理文件时会产生相同的效果。
1.第一段代码
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
ostream_iterator<string> out_iter(cout,"\n");
istream_iterator<string> in_iter(cin), eof;
while(in_iter != eof)
{
*out_iter = *in_iter;
++in_iter;
++out_iter;
}
return 0;
}
2.第二段代码
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
ostream_iterator<string> out_iter(cout,"\n");
istream_iterator<string> in_iter(cin), eof;
//只是这个循环体不同
while(in_iter != eof)
{
*out_iter++ = *in_iter++;
}
return 0;
}
【输入】hello world 回车
【输出】
第一段代码输出:
hello
第二段代码输出:
hello
world
【问题】
*out_iter++ = *in_iter++;与
*out_iter = *in_iter;
++in_iter;
++out_iter;
到底区别在哪?请详细解释下,谢谢!
------解决方案--------------------
第一个, 先输出, 再移动.
第二个, 先移动, 再输出.
第二个等价于:
out_temp = out_iter;
in_temp = in_iter;
++out_iter;
++in_iter;
*out_temp = *in_temp; // 注意 ++ 在 = 之前. 第一个是 ++ 在 = 之后.
------解决方案--------------------
楼上正解。
*out_iter++ = *in_iter++;的步骤是先移动,再输出,于是在in_iter向后移动时,发现后面输入缓冲区空,又没有到文件尾,于是开始等待用户输入,而这时最后一个单词还没有输出。
一般输入输出流迭代器更适合用于处理文本文件而不是控制台IO,上面两段代码在处理文件时会产生相同的效果。