Файл заголовка 'is_partitioned.hpp' содержит два варианта одного алгоритма,<is_partitioned
>. Алгоритм проверяет, разделена ли последовательность согласно предикату; другими словами, все элементы в последовательности, удовлетворяющие предикату, находятся в начале последовательности.
Распорядок<is_partitioned
>принимает последовательность и предикат. Он возвращается истинным, если последовательность разделена в соответствии с предикатом.
<is_partitioned
>Появляются в двух формах; первый использует два итератора для определения диапазона. Вторая форма принимает один параметр диапазона и использует Boost. Диапазон, чтобы пройти его.
Функция<is_partitioned
>возвращается истинной, если элементы в последовательности разделены в соответствии с их способностью удовлетворять предикату. Есть две версии: одна занимает два итератора, а другая занимает диапазон.
template<typename InputIterator, typename Predicate>
bool is_partitioned ( InputIterator first, InputIterator last, Predicate p );
template<typename Range, typename Predicate>
bool is_partitioned ( const Range &r, Predicate p );
<c
>, содержащее<{0,1,
2,3,14,15}
>, после чего
bool isOdd ( int i ) { return i % 2 == 1; }
bool lessThan10 ( int i ) { return i < 10; }
is_partitioned ( c, isOdd ) --> false
is_partitioned ( c, lessThan10 ) --> true
is_partitioned ( c.begin (), c.end (), lessThan10 ) --> true
is_partitioned ( c.begin (), c.begin () + 3, lessThan10 ) --> true
is_partitioned ( c.end (), c.end (), isOdd ) --> true
<is_partitioned
>работает на всех итераторах, кроме выходных итераторов.
Оба варианта<is_partitioned
>работают вO(N)(линейное) время; то есть они сравниваются с каждым элементом в списке один раз. Если последовательность не будет разделена в какой-либо момент, рутина немедленно прекратится, не изучая остальные элементы.
Оба варианта<is_partitioned
>берут свои параметры по стоимости или по ссылке и не зависят от какого-либо глобального состояния. Таким образом, все процедуры в этом файле обеспечивают сильную гарантию исключения.
- Версия рутины на основе итератора<
is_partitioned
>также доступна как часть стандарта C++11. - <
is_partitioned
>возвращается истинно для пустых диапазонов, независимо от того, какой предикат передается для проверки.