Il s'agit du code du code de la bibliothèque standard C ++ remove. Pourquoi les inégalités sont-elles testées au if (!(*first == val))lieu de if (*first != val)?
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator result = first;
while (first!=last) {
if (!(*first == val)) {
*result = *first;
++result;
}
++first;
}
return result;
}
operator==on s'attend à ce qu'ils soient utilisés ici ...
constdans l'exemple de mon commentaire précédent, mais vous comprenez. (Trop tard pour le modifier)
EqualityComparableque Hurkyl a mentionné dans sa réponse .
operator!=. Utilisez simplement l'operator==implémentation:bool operator!=(const Foo& other) { return !(*this == other); }