0

「wy.txt」という名前のファイルがあり、次のような整数が含まれています。

1 2 3 4 5 6 7 8

istream_iterator<int>ファイルを読み取り、copy()データを stdout ストリームに出力するために使用します。

次に、同じものを使用して名前付きistream_iterator<int>を構築しますが、のサイズは1です。理由を知っていますか?vectorvv

これは私のコードです:

    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

を逆参照すると、関連付けられたファイルから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 に答える