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 ...
const
dans l'exemple de mon commentaire précédent, mais vous comprenez. (Trop tard pour le modifier)
EqualityComparable
que Hurkyl a mentionné dans sa réponse .
operator!=
. Utilisez simplement l'operator==
implémentation:bool operator!=(const Foo& other) { return !(*this == other); }