алгоритм копирования с помощью ifstream

следующий код ведет себя не так, как я ожидал. Пожалуйста, помогите мне понять, как это работает.

#include <algorithm>
#include <iterator>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

struct user
{
        string name;
        string age;
        string id;
};

istream& operator>>(istream& is, user& s)
{
        getline(is, s.name, ':');
        getline(is, s.age, ':');
        getline(is, s.id);

        return is;
}

int main(int argc, char* argv[])
{
        ifstream file("file.txt");
        vector<user> vec;
        copy(istream_iterator<user>(file), istream_iterator<user>(), back_inserter(vec));

        return 0;
}

Мой пользовательский оператор>> вызывается дважды, но я ожидаю, что он будет вызван только один раз, потому что содержимое:

John:forty:21-5821-0

6
задан flumpb 30 March 2012 в 22:46
поделиться