Klasa Patient posiada pola:
int id;
char sex;
int id_father;
int id_mother;
Posiadam vector shared pointerów na obiekty Klasy Patient.
std::vector < std::shared_ptr<Patient>> patients;
oraz iterator na vector shared pointerów na obiekty Klasy Patient.
std::vector <std::shared_ptr <Patient>>::iterator iterator;
Z pliku szczytuję dane o pacjentach i tworzę obiekty.
while (!file.eof())
{
patients.push_back(std::shared_ptr <Patient>(new Patient));
iterator = patients.end() - 1;
line.clear();
getline(file, line, '|');
if (line.empty()) break;
(*iterator)->set_id(atoi(line.c_str()));
getline(file, line, '|');
(*iterator)->set_sex(line);
line.clear();
getline(file, line, '|');
if (line.empty())
{
(*iterator)->set_id_father(NULL);
continue;
}
else
{
(*iterator)->set_id_father(atoi(line.c_str()));
}
line.clear();
getline(file, line);
if (line.empty())
{
(*iterator)->set_id_mother(NULL);
continue;
}
else
{
(*iterator)->set_id_mother(atoi(line.c_str()));
}
}
Dane:
1|M|2|1 // odpowienio id, sex, id_father, id_mother
2|M|2|1
3|M|2|1
4|K|2|1
5|M|2|1
W mainie wypisuje dane:
for (iterator = patients.begin(); iterator != patients.end()-1; iterator++)
{
std::cout << (*iterator)->get_id()<<std::endl; // 1,2,3,4,5
}
Wszystko się zgadza do momentu gdy nie usunę np. id_father lub id_mother z jednego pacjenta, wówczas w outpucie brakuje osoby o jeden niżej.
przykład:
Dane:
1|M|2|1 // odpowienio id, sex, id_father, id_mother
2|M
3|M|2|1
4|K|2|1
5|M|2|1
output:
1
2
4
5