Salve a tutti,
ho un problema con il seguente esercizio:
Ho pensato di fare così:Utilizzare l’ereditarietà per realizzare la classe CodaConGentleman che implementa una coda di persone in cui, ad ogni estrazione, se il prossimo da servire è un uomo, questo “fa il gentleman” e lascia passare tutte le donne in coda tra lui e l’uomo successivo. Si supponga che la classe persona abbia un metodo che consenta di distinguere il sesso. In particolare: (a) si implementi l’interfaccia della classe e i soli metodi di inserimento/estrazione. Note: Solo l’uomo in testa lascia passare le donne; è consentito l’uso di STL.
Il problema è che appena trova il primo maschio continua a ciclare di continuo...Non capisco perchè il For non vada all'elemento successivocodice:#include "CodaConGentleman.h" void CodaConGentleman::addPersona(Persona p) { persone.push_back(p); } void CodaConGentleman::controlla() { int cont=0; cout<<"lista iniziale"<<endl; stampa(); //do{ for(list<Persona>::iterator it=persone.begin();it!=persone.end();it++) { cout<<"nome soggetto esaminato"<<persone.front().getNome()<<" sesso "<<persone.front().getSesso()<<endl; cont++; if(persone.front().getSesso()==Femmina) { eliminaDonne(); } } } void CodaConGentleman::eliminaDonne() { do{ if(persone.front().getSesso()==Femmina) { cout<<"elimino nome "<<persone.front().getNome()<<" sesso "<<persone.front().getSesso()<<endl; persone.pop_front(); } persone.front(); cout<<"lista dopo eliminazione"<<endl; stampa(); } while(persone.front().getSesso() == Femmina); } void CodaConGentleman::stampa() { for(list<Persona>::iterator it= persone.begin(); it!=persone.end(); it++) { cout<<(*it).getNome()<<" "<<(*it).getSesso()<<" "<<endl; } } void CodaConGentleman::estrai(Persona p) { persone.pop_back(); return ; }
Grazie per l'attenzione