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 contains
membro, 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 bool
sarebbe 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 ++.