2013-07-15 37 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中的单个已提取的值,然后结束其迭代。

相关问题