[c++] programmazione oggetti (l'uso di insert ed erase)credo

di il
3 risposte

[c++] programmazione oggetti (l'uso di insert ed erase)credo

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.

#ifndef CODACONGENTLEMAN_H_INCLUDED
#define CODACONGENTLEMAN_H_INCLUDED
#include"Persona.h"
#include<list>
class CodaConGentleman : private list<Persona>
{
    private:

    public:
    void push(Persona& p)
    {
        list<Persona>::push_back(p);
    }
    Persona& pop()
    {
        list<Persona>::iterator x = list<Persona>::begin();
        Persona daEstrarre = (*x);


        for(list<Persona>::iterator it=list<Persona>::begin();it!=list<Persona>::end();it++)
        {
            if((*it).IsGentleman() == true)
            {
                for(list<Persona>::iterator jt=it++;jt!=list<Persona>::end();jt++)
                {
                    if((*jt).IsGentleman() == false)
                    {
                        // che devo fare???????? 
                    }
                }

        }
        list<Persona>::pop_front();
        return daEstrarre;
}

    friend ostream& operator<<(ostream& out,const CodaConGentleman& c)
    {
        for(list<Persona>::const_iterator it=c.list<Persona>::begin();it!=c.list<Persona>::end();it++)
        {
            out<<(*it)<<endl;
        }
        return out;
    }
};


#endif // CODACONGENTLEMAN_H_INCLUDED

3 Risposte

  • Re: [c++] programmazione oggetti (l'uso di insert ed erase)credo

    Secondo me questo problema va letto diversamente, invece di 'lascia passare tutte le donne in coda tra lui e l’uomo successivo' lo penserei come 'se dietro di lui c' è una donna la lascia passare', dato che all' estrazione sucessiva la storia si ripete di fatto lascia passare tutte le donne, solo che così è più semplice. E mi sembra anche più coerente col fatto che dalla coda si estrae un elemento alla volta.
  • Re: [c++] programmazione oggetti (l'uso di insert ed erase)credo

    Grazie per la risposta..ma la traccia è quella..domani c'è l esame e questo era il secondo esercizio
  • Re: [c++] programmazione oggetti (l'uso di insert ed erase)credo

    Allora la soluzione di questo problema è tanto semplice. devi solo trovare due iterator che puntanto rispettivamente al gentelman in questione e quello successivo; Una cosa del tipo
    
    list<Persona>::iterator first = std::find_if(begin(),end(),IsGentleman());
    list<Persona>::iterator last = std::find_if(first,end(),IsGentleman());
    this.erase(first,last);
    
Devi accedere o registrarti per scrivere nel forum
3 risposte