2013-07-15 71 views
1

下面是示例代碼和編譯結果在Linux中使用gcc4.8.1:爲什麼多個輸入迭代器會導致意想不到的結果?

//content of test.txt 
1 2 3 4 5 

int main() 
{ 
    fstream fs ("test.txt", std::fstream::in); 
    istream_iterator<string> is1(fs),eof1; 
    istream_iterator<string> is2(fs),eof2; 

    while(is1!=eof1){ 
     cout<<"is1:"<<*is1++<<endl; 
    } 
    while(is2!=eof2){ 
     cout<<"is2:"<<*is2++<<endl; 
    } 


    return 0; 
} 


//result unexpected  
$./m 
is1:1 
is1:3 
is1:4 
is1:5 
is2:2 

從結果中,我們可以看到使用多個輸入迭代器時,它會給意想不到的結果。 有人能告訴我爲什麼會發生這種情況嗎?

回答

3

這回答24.6.1/1:

類模板istream_iterator是一個輸入迭代(24.2.3),該 讀取(使用操作者>>)從 輸入流連續元素它被修建了。它建成後,每次++ 時,迭代器讀取並存儲T.

所以當你創建is1它讀取1。當您創建is2時,它會讀取2,然後用is1迭代文件的其餘部分。最後,您打印is2中的單個已提取的值,然後結束其迭代。

相關問題