Я думаю, что @ user1200129 находится на правильном пути, но пока не совсем собрал все кусочки вместе.
Я бы немного изменил структуру:
struct PeopleInfo
{
char gender;
std::string name_first;
std::string name_last;
std::string job;
};
Тогда я бы перегрузил operator>>
для этой структуры:
std::istream &operator>>(std::istream &is, PeopleInfo &p) {
is >> p.gender;
std::getline(is, p.name_first);
std::getline(is, p.name_last);
std::getline(is, p.job);
return is;
}
Поскольку вы хотите иметь возможность их отображать, я бы добавил operator<<
, чтобы сделать это тоже:
std::ostream &operator<<(std::ostream &os, PeopleInfo const &p) {
return os << "Gender: " << p.gender << "\n"
<< "First Name: " << p.name_first << "\n"
<< "Last Name: " << p.name_last << "\n"
<< "Job: " << p.job;
}
Тогда чтение в файл, полный данных, может выглядеть примерно так:
std::ifstream input("my file name");
std::vector<PeopleInfo> people;
std::vector<PeopleInfo> p((std::istream_iterator<PeopleInfo>(input)),
std::istream_iterator<PeopleInfo(),
std::back_inserter(people));
Аналогично, отображение информации о людях из вектора выглядит примерно так:
std::copy(people.begin(), people.end(),
std::ostream_iterator<PeopleInfo>(std::cout, "\n"));