Sto usando pesantemente std::set<int> e spesso ho semplicemente bisogno di controllare se un tale set contiene un numero o meno.
Troverei naturale scrivere:
if (myset.contains(number))
...
Ma a causa della mancanza di un containsmembro, ho bisogno di scrivere l'ingombrante:
if (myset.find(number) != myset.end())
..
o il non così ovvio:
if (myset.count(element) > 0)
..
C'è una ragione per questa decisione progettuale?
count()approccio è che fa più lavoro di quanto countains()dovrebbe fare a.
contains()che restituisce una boolsarebbe perdere preziose informazioni su dove l'elemento è nella collezione . find()conserva e restituisce tali informazioni sotto forma di un iteratore, quindi è una scelta migliore per una libreria generica come STL. (Questo non vuol dire che un bool contains()non sia molto carino o addirittura necessario, però.)
contains(set, element)funzione gratuita utilizzando l'interfaccia pubblica del set. Pertanto, l'interfaccia del set è funzionalmente completa; l'aggiunta di un metodo pratico aumenta semplicemente l'interfaccia senza abilitare alcuna funzione aggiuntiva, il che non è il modo C ++.