流迭代器的结尾是可配置的吗?

时间:2012-10-17 11:13:43

标签: c++ std istream-iterator

请考虑以下代码:

vector<__int64> vNumbers;   
copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers));

如果我输入1 23 45并按Enter,则向量将填充45,23,1,数字。 现在一个简单的问题。如何更改代码,以便在按Enter并输入新数字时,数字也会添加到矢量中?换句话说,如何配置流迭代器的结束?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是流尽可能地读取而不会再次阻塞。只要按[Enter],stdin就会被操作系统刷新(在某些情况下,并非在所有情况下都是如此)。流读取直到EOF或直到无法再读取任何内容。这是每次刷新时发生的事情(一次可用的一堆新数据)。

这就是不同的人观察不同行为的原因。只要将文件传输到流中,它就会立即将整个文件提供,并且只在文件末尾停止。新行只是流的空白,相似的空格和制表符。

如果不在较低级别控制输入,则无法解决此问题。