Alle Elemente im vector gleich ?



  • Ich will prüfen ob alle Einträge in einem Vector gleich sind.
    Kann man das Ganze mit equal so realisieren :

    equal(coll.begin(),coll.end(),coll.rbegin())
    

    Bin mir etwas unsicher mit dem reverse_iterator. Oder gibt es eine bessere Möglichkeit ?



  • Hem, finde ich nicht so gut. Ich würde das anders machen: nimm das erste Element, und suche mit find, einen Wert, der nicht dem ersten Element entspricht. Dann weißt du, ob alle Elemente nicht gleich sind. 😉 Weil prinzipiell alle Elemente vergleichen, obwohl vielleicht der zweite schon nicht mehr gleich ist, ist unproduktiv. Und std::find ist schon fertig implementiert, und somit kein Mehraufwand für dich.



  • Haste recht !
    Dürfte auf jedenfall performanter sein.
    Danke für den Hinweis.



  • Ich glaube, equal würde auch abbrechen, sobald ein Elementvergleich nicht true ergibt. Das Problem ist aber ein anderes. Stell dir z. Bsp. einen vector<int> mit den Werten {1, 2, 2, 1} vor ... Jeder Vergleich, den dein equal Aufruf durchführen würde, ergäbe true.

    Artchis Vorschlag, find_if zu benutzen, ist aber wunderbar.


Anmelden zum Antworten