2

请考虑以下代码:

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

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

4

1 回答 1

1

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

这就是为什么不同的人观察不同的行为。将文件通过管道传输到流中后,它将立即使整个文件可用,并且仅在文件末尾停止。换行符只是流的空白,就像空格和制表符一样。

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

于 2012-10-17T12:03:52.103 回答