#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
vector<int> vin;
/*while (in_iter!=eof)
{
vin.push_back(*in_iter++);
}*/
istream_iterator<int> in_iter2(cin), eof2;
vector<int> vin2(in_iter2,eof2);
return 0;
}
当我向程序输入1 2 3 c
(最后一个元素'c'使cin状态为EOF)时,vin2
将包含元素:2 3
;但是,当我注释变量in_iter
的声明时,相同的输入将使vin2
包含元素:1 2 3
;变量in_iter
的声明如何对此程序生效?谢谢!
答案 0 :(得分:6)
istream_iterator
与istream
的绑定导致从istream
读取一个值,并存储在迭代器中。这是必要的,以便取消迭代迭代器可以给出一个值。因此,如果您将2 istream_iterators
绑定到同一istream
,则会读取2个值。
将2个活动的istream迭代器绑定到同一个istream很少有用。
作为一个有趣的实验,看看如果同时创建in_iter
和in_iter2
两者都绑定到cin
会发生什么,并使用in_iter
初始化您的向量(或以较小者为准)一个是第一个创建的。)