0

我有一个名为“wy.txt”的文件,它有一些像这样的整数:

1 2 3 4 5 6 7 8

istream_iterator<int>用来读取文件,并将copy()数据输出到标准输出流。

然后我用同样istream_iterator<int>的方法构造了一个vectornamed v,但是大小v是1,你知道为什么吗?

这是我的代码:

    ifstream file("wy.txt");
    istream_iterator<int> fileStream(file);
    istream_iterator<int> eof;

    // output: 1 2 3 4 5 6 7 8
    copy(fileStream, eof, ostream_iterator<int>(cout, " ")); 
    cout<<endl;

    vector<int> v(fileStream, eof);
    // output: 1
    cout<<v.size()<<endl;
   // output: 1
    for_each(v.begin(), v.end(), [](const int & t){cout<<t<" ";});
    cout<<endl;

编辑:

我已将代码更改为:

    ifstream file("wy.txt");
    istream_iterator<int> fileStream(file);
    istream_iterator<int> eof;

    copy(fileStream, eof, ostream_iterator<int>(cout, " "));
    cout<<endl;
    file.seekg(0, ios::beg);
    file.clear();
    vector<int> v(fileStream, eof); 
    cout<<v.size()<<endl;
    for_each(v.begin(), v.end(), [](const int & t){cout<<t<" ";});

...但它有同样的问题。

4

2 回答 2

3

取消引用 an 的istream_iterator<int>行为类似于int从关联文件中提取:

int myInt;
myInt = *fileStream; // same as file >> myInt;

这也意味着您实际上提取了文件的内容。您必须再次在开头设置输入光标:

file.clear();  // clear the EOF flag
file.seekg(0);
于 2013-08-06T14:39:41.497 回答
0

仅重置文件指针将不起作用

使用 清除所有 ifstream 的内部错误状态标志状态clear。然后使用seekg

istream_iterator<int> fileStream(file);
istream_iterator<int> eof;
copy(fileStream, eof, ostream_iterator<int>(cout, " ")); 
cout<<endl;
file.clear();
file.seekg(0);
vector<int> v(fileStream, eof);
cout<<v.size()<<endl;
于 2013-08-06T15:03:47.880 回答