Używam mocno std::set<int>
i często po prostu muszę sprawdzić, czy taki zestaw zawiera liczbę, czy nie.
Uznałbym za naturalne napisanie:
if (myset.contains(number))
...
Ale z powodu braku contains
członka muszę napisać uciążliwe:
if (myset.find(number) != myset.end())
..
lub nie tak oczywiste:
if (myset.count(element) > 0)
..
Czy istnieje powód takiej decyzji projektowej?
count()
podejściem jest to, że wykonuje ono więcej pracy, niż countains()
byłoby to konieczne.
contains()
, która zwraca bool
byłoby stracić cenne informacje o tym, gdzie element jest w zbiorze . find()
zachowuje i zwraca te informacje w postaci iteratora, dlatego jest lepszym wyborem dla biblioteki ogólnej, takiej jak STL. (To nie znaczy, że bool contains()
nie jest to zbyt miłe w posiadaniu ani nawet konieczne).
contains(set, element)
darmową funkcję, korzystając z publicznego interfejsu zestawu. Dlatego interfejs zestawu jest funkcjonalnie kompletny; dodanie wygodnej metody po prostu zwiększa interfejs bez włączania żadnej dodatkowej funkcji, co nie jest sposobem C ++.