Глава 18. Классы-контейнеры_________________________________483

rotate. Алгоритм rotate принимает входную последовательность [first, middle-l] + [middle, last-l] и меняет порядок в секциях последовательно-сти так, чтобы получить выходную последовательность вида [middle, last-l] + [first, middle-l]. rotate_copy помещает результат в выходную последовательность, вместо изменения входной последовательности. Версия copy возвращает указатель на элемент, следующий за последним в выходной последовательности.

template <class Forwardlterator>

void rotate (Forwardlterator first, Forwardlterator middle, Forwardlterator last) ;

template <class Forwardlterator, class OutputIterator> Outputlterator rotate_copy (Forwardlterator first,

Forwardlterator middle,

Forwardlterator last,

Outputlterator result) ;

random_shuffle. Алгоритм random_shuffle случайным образом переставляет элементы во входной последовательности. Вторая версия использует предлагаемый пользователем генератор случайных чисел. Такой генератор должен принимать целое п и возвращать число между о и n-l.

template <class RandomAccessIterator> void random shuffle (RandomAccessIterator first, RandomAccessIterator last) ;

template <class RandomAccessIterator, RandomNumberGenerator> void random_shuffle (RandomAccessIterator first,

RandomAccessIterator last

RandomNumberGenerator& rand) ;

partition. Разделяет элементы входной последовательности [first, last) на две группы. Первую группу составляют элементы, для которых pred (element) истинна, эти элементы помещаются в первой части последовательности. Остальные составляют вторую группу и помещаются во вторую часть последовательности. Версия алгоритма, называемая устойчивой (stable), в дополнение к указанным операциям упорядочивает элементы внутри групп. Возвращаемое значение для обеих версий указывает на первый элемент второй группы.

template <class Bidirectionallterator, class Predicate> Bidirectionallterator partition (Bidirectionallterator first,

Bidirectionallterator last,

Predicate pred);

template <class Bidirectionallterator, class Predicate> Bidirectionallterator stable_partition

^(Bidirectionallterator first, Bidirectionallterator last, Predicate pred) ;

16*