std::max_element(...)



  • hallo!

    ich möchte mithilfe von max_element das älteste tier herausfinden.
    wir sollen Polymorphi verwenden:

    vector<animal*> tiere;
    
        cow c("Birgit", dat, 12.2, 80.0, 4, 30.6, 10.6, 10.5 );
        animal* a1= &c;
        tiere.push_back(a1);
        ausgabe(a1);
    
        chicken ch("Iris", dat, 12.2, 80.0, 2, 20, 123.6, 55.5 );
        animal* a2 = &ch;
        tiere.push_back(a2);
        ausgabe(a2);
    
    animal* oldest = std::max_element(*tiere.begin(), *tiere.end(),alt);
    
    }
    
    bool alt(animal i, animal j)
    {
      datum* a = i.gebdatum();
      datum* b = j.gebdatum();
      return(bool) (&a<&b);
    
    }
    

    Ich erhalte nun einen Segfault. Der hund ist dahin begraben, dass ich die animals als Zeiger speichere. Wie kann ich nun auf diese in max_element richtig zugreifen?


  • Mod

    Deine Vergleichsfunktion muss den gleichen Typen annehmen, wie im Container gespeichert sind. Also Zeiger auf animal.

    edit: Und du darfst beim Aufruf von max_element natürlich nicht die Iteratoren dereferenzieren.



  • ahhh, genau!

    das wars jetzt gehts ich danke dir!


Anmelden zum Antworten