C++ 流结束迭代器是否可配置? 请考虑下面的代码: vector<__int64> vNumbers; copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers)); 向量数; 复制(istream_迭代器(cin)、istream_迭代器()、back_插入器(vNumbers));

C++ 流结束迭代器是否可配置? 请考虑下面的代码: vector<__int64> vNumbers; copy(istream_iterator<__int64>(cin), istream_iterator<__int64>(), back_inserter(vNumbers)); 向量数; 复制(istream_迭代器(cin)、istream_迭代器()、back_插入器(vNumbers));,c++,std,istream-iterator,C++,Std,Istream Iterator,如果我输入12345并按enter,向量将填充45,23,1,个数字。 现在是一个简单的问题。如何更改代码,以便如果我按Enter并输入新的数字,这些数字也会添加到向量中?换句话说,如何配置流结束迭代器?您遇到的问题是,流在不再次阻塞的情况下尽可能地读取。只要按下[Enter],操作系统就会刷新stdin(在某些情况下,并非所有情况下)。流一直读取到EOF或再也没有可读取的内容为止。这是每次刷新时发生的情况(一次可用的一堆新数据) 这就是为什么不同的人观察不同的行为。一旦您将一个文件导入流中,它

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

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

这就是为什么不同的人观察不同的行为。一旦您将一个文件导入流中,它将立即使整个文件可用,并且只在文件末尾停止。换行符只是流的空白,类似于空格和制表符


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

在这种情况下,您将如何表示流的结束?这是另一个好问题?如果要配置输出流,则必须表示处理流结束的其他方式,否则,它只会不断吞噬数字,永远不会停止。如果您不想表示结束流,应该怎么做?例如
x
end
或其他有意义的东西。您确实尝试过这个吗?它不像你说的那样工作,至少不是在我的终端上。我需要在它停止读取之前输入Ctrl+Z。