2013-12-11 32 views
2
#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的聲明如何影響該程序?謝謝!用C istream_iterator ++的怪異結果

+1

輸入EOF的正確方法是...輸入EOF。根據您使用的操作系統,它是ctrl-Z或ctrl-D。輸入c不會產生任何EOF。 – chris

+2

「當我註釋變量in_iter的聲明時」 - 這是什麼意思? –

+0

@TonyD,我在想評論。 – chris

回答

6

istream_iteratoristream的綁定導致從istream中讀取一個值,並將其存儲在迭代器中。這是必要的,以便迭代器的取值可以給出一個值。因此,如果您將2 istream_iterators綁定到相同的istream,則會讀取2個值。

將2個活動的istream迭代器綁定到同一個istream是很有用的。

作爲一個輕度有趣的實驗,看看你是否同時創建in_iterin_iter2,都綁定到cin發生了什麼,並與in_iter初始化向量(或任何已創建了第一個)。