Losi, díky moc! Nevím, co bych si bez tebe počal... Předělal jsem to teda tak, aby seznamy obsalovaly pointery, ale ještě se mi nepodařilo zprovoznit odebrání studenta ze seznamu na základě jeho id...
Napadly mě dvě varianty, bohužel ani jedna mi nepracuje...
1.
void SeznamStudentu :: odeberStudenta(int id)
{
list<Student*>::iterator i;
for(i=studenti.begin(); i != studenti.end(); i++)
{
if (((*i)->getId()) == id) studenti.remove((*i));
}
}
2.void SeznamStudentu :: odeberStudenta(int id)
{
list<Student*>::iterator i;
for(i=studenti.begin(); i != studenti.end(); i++)
{
if (((*i)->getId()) == id) studenti.erase(i));
}
}
Program jde normálně zkompilovat, ale když se pokusím zavolat metodu na odebrání, končím na Windows hlášce, že program provedl neplatnou operaci...PS: V metodách ještě nemám zohledněné co dělat když se student s daným id nenajde... To dodělám, až mi to bude chodit aspoň takhle.
PSS:
Medota najdiStudenta(int id) mi jede, nedalo by se ji nějak využit při odebíraní?
Student* SeznamStudentu :: najdiStudenta(int id)
{
list<Student*>::iterator i;
for(i=studenti.begin(); i != studenti.end(); i++)
{
if (((*i)->getId()) == id) return (*i);
}
return NULL;
}
Javě by to šlo napsat třeba takto:
public void odeberStudenta(int id)
{
Student s;
ListIterator <Student> i = studenti.listIterator();
while(i.hasNext())
{
s = (Student)i.next();
if (s.getId() == id)
{
studenti.remove(studenti.indexOf(s));
}
else System.out.println("Student s ID "+id+" nenalezen"); // vyjimka by byla asi lepsi
}
}