C++中istream_iterator的奇怪结果

skf*_*eng 2 c++ istream-iterator

#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;
}
Run Code Online (Sandbox Code Playgroud)

当我输入1 2 3 c(最后一个元素'c'使cin状态为EOF)到程序时,最后,vin2将包含元素:2 3;但是,当我注释变量的声明时in_iter,相同的输入将vin2包含元素:1 2 3; How变量声明in_iter是否对此程序有效?谢谢!

Ben*_*ley 6

的结合istream_iterator到一个istream原因之一值被从读取istream,并存储在迭代器.这是必要的,以便取消迭代迭代器可以给出一个值.因此,如果将2绑定istream_iterators到同一个istream,则将读取2个值.

将2个活动的istream迭代器绑定到同一个istream是很有用的.

作为一个有趣的实验,看看如果你创建了两个,in_iter并且in_iter2都绑定到cin并初始化你的矢量in_iter(或者首先创建的那个)会发生什么.