Ich benutze viel std::set<int>
und oft muss ich einfach überprüfen, ob ein solches Set eine Nummer enthält oder nicht.
Ich würde es natürlich finden zu schreiben:
if (myset.contains(number))
...
Aber wegen des Fehlens eines contains
Mitglieds muss ich das umständliche schreiben:
if (myset.find(number) != myset.end())
..
oder das nicht so offensichtlich:
if (myset.count(element) > 0)
..
Gibt es einen Grund für diese Entwurfsentscheidung?
count()
Ansatzes besteht darin, dass er mehr Arbeit leistet als countains()
nötig.
contains()
der zurückkehrt eine bool
würde wertvolle Informationen über verlieren , wo das Element in der Sammlung . find()
Bewahrt diese Informationen auf und gibt sie in Form eines Iterators zurück. Daher ist dies eine bessere Wahl für eine generische Bibliothek wie STL. (Das soll nicht heißen, dass a bool contains()
nicht sehr schön zu haben oder sogar notwendig ist.)
contains(set, element)
kostenlose Funktion über die öffentliche Oberfläche des Sets zu schreiben . Daher ist die Schnittstelle des Sets funktional vollständig. Durch Hinzufügen einer Convenience-Methode wird lediglich die Benutzeroberfläche vergrößert, ohne dass zusätzliche Funktionen aktiviert werden. Dies ist nicht die C ++ - Methode.