[c++]Operatori di ridefinizione (==) tra due liste

di Anonimizzato10712 il
3 risposte
Se ho una classe Componente
dove le componenti sono il nome ed il costo
e una classe Automobile
dove ha una lista di Componenti (list<Componente> componenti;)
per vedere se due liste sono uguali devo fare cosi: (???)

//nella classe Componente
bool operator!=(const Componente& c)
{
      if(nome==c.nome)
             return false;
      return true;
}
//nella classe Automobile
bool operator==(const Automobile& a)
{
     if(componenti.size() != a.componenti.size())
            return false;
    list<Componente>::iterator it1=componenti.begin();
    for(list<Componente>::const_iterator it2=a.componenti.begin();it2!=a.componenti.end();it2++)
    {
          if((*it1) != (*it2))
               return false;
          it1++;
    }
return true;
}

3 Risposte

  • No così
    
    
    bool operator==(const Componente& c)
    {
         return (nome == c.nome);
    }
    
    bool operator==(const Automobile& a)
    {
         if(componenti.size() != a.componenti.size())
                return false;
        return std::equal(componenti.begin(),componenti.end(),a.componenti.begin());
    }
    
  • In quel modo è sbagliato completamente o si potrebbe comunque fare?
  • In teoria è giusta. Devi però verificare l'uguale non il diverso. Usa il preincremento invece del postincremento. Si dice che è + veloce.
Devi accedere o registrarti per scrivere nel forum
3 risposte