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.