C ++中istream_iterator的奇怪结果

时间:2013-12-11 03:29:51

标签: 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;
}

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

1 个答案:

答案 0 :(得分:6)

istream_iteratoristream的绑定导致从istream读取一个值,并存储在迭代器中。这是必要的,以便取消迭代迭代器可以给出一个值。因此,如果您将2 istream_iterators绑定到同一istream,则会读取2个值。

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

作为一个有趣的实验,看看如果同时创建in_iterin_iter2两者都绑定到cin会发生什么,并使用in_iter初始化您的向量(或以较小者为准)一个是第一个创建的。)