J'utilise beaucoup std::set<int>
et je dois souvent simplement vérifier si un tel ensemble contient un nombre ou non.
Je trouverais naturel d'écrire:
if (myset.contains(number))
...
Mais à cause du manque de contains
membre, j'ai besoin d'écrire la lourde:
if (myset.find(number) != myset.end())
..
ou le pas aussi évident:
if (myset.count(element) > 0)
..
Y a-t-il une raison à cette décision de conception?
count()
approche est qu'elle fait plus de travail que ce countains()
qu'elle aurait à faire.
contains()
qui retourne un bool
serait perdre de précieuses informations sur l' endroit où l'élément est dans la collection . find()
préserve et renvoie ces informations sous la forme d'un itérateur, c'est donc un meilleur choix pour une bibliothèque générique comme STL. (Cela ne bool contains()
veut pas dire que ce n'est pas très agréable ou même nécessaire.)
contains(set, element)
fonction gratuite en utilisant l'interface publique de l'ensemble. Par conséquent, l'interface de l'ensemble est fonctionnellement complète; l'ajout d'une méthode pratique augmente simplement l'interface sans activer de fonction supplémentaire, ce qui n'est pas la méthode C ++.