Предикаты в stl
Несмотря на то, что в отличие от обычных
функций функторы в большей степени
предназначены для сохранения состояния
между вызовами, предикаты используемые
стандартными алгоритмами (под предикатами
понимаются функции или функторы,
возвращающие значение типа bool,
которые используются стандартными
алгоритмами для определения того, нужно
ли обрабатывать отдельные элемент,
например удалять в случаеremove_if)
не должны иметь сохранять никакого
состояния между вызовами, т.е. результат
выполнения предиката должен зависеть
только от переданных ему аргументов.
Это требование явно описано в стандарте
и его нарушение может привести к
непредсказуемому поведению программы.
1Совместимость функтора сSTLв основном требуется для конструирования
сложных функторов из более простых, а
также объединения со стандартными
функторами. Вопросы использования
стандартных функторов рассматриваются
в следующей работе.
В случае
простого использования функтора в
алгоритме STLон может не
удовлетворять описанным требованиям,
как это было в примерах приводимых в
работах посвященных стандартным
алгоритмам.