>rotate()
и >random_shuffle()
, реорганизуют всю последовательность.Базовые версии этих алгоритмов работают "на месте", т.е. они реорганизуют элементы непосредственно исходной последовательности. Три алгоритма изменения порядка предоставляют копирующие версии. Они записывают переупорядоченные значения в получающую последовательность, а не непосредственно в исходную. Для получающей последовательности этим алгоритмам требуются итераторы вывода.
Эти алгоритмы переупорядочивают исходную последовательность. Им необходимы по крайней мере прямые итераторы.
>remove(beg, end, val)
>remove_if(beg, end, unaryPred)
>remove_copy(beg, end, dest, val)
>remove_copy_if(beg, end, dest, unaryPred)
"Удаляет" элементы из последовательности, записывая поверх них те элементы, которые должны быть сохранены. Удаляются те элементы, которые равны значению >val
или те, для которых предикат >unaryPred
вернул значение >true
. Возвращает итератор на следующий элемент после последнего удаленного.
>unique(beg, end)
>unique(beg, end, binaryPred)
>unique_copy(beg, end, dest)
>unique_copy_if(beg, end, dest, binaryPred)
Переупорядочивает последовательность так, чтобы смежные совпадающие элементы были удалены при перезаписи. Возвращает итератор на следующий элемент после последнего уникального. Для проверки совпадения двух смежных элементов первая версия использует оператор >==
, а вторая — предикат.
>rotate(beg, mid, end)
>rotate_copy(beg, mid, end, dest)
"Поворачивает" элементы вокруг элемента, обозначенного итератором >mid
. Элемент, указанный итератором >mid
, становится первым элементом, затем идет последовательность от >mid+1
до >end
(но не включая его), далее следует диапазон от >beg
до >mid
(но не включая его). Возвращает итератор, обозначающий элемент, который первоначально был в >beg
.
Поскольку эти алгоритмы обрабатывают исходную последовательность в обратном порядке, им необходимы двунаправленные итераторы.
>reverse(beg, end)
>reverse_copy(beg, end, dest)
Меняет порядок элементов последовательности на обратный. Алгоритм >reverse()
возвращает тип >void
, а алгоритм >reverse_copy()
возвращает итератор, принимающей последовательности на элемент, который расположен за последним скопированным.
Поскольку эти алгоритмы реорганизуют элементы в произвольном порядке, им нужны итераторы прямого доступа.
>random_shuffle(beg, end)
>random_shuffle(beg, end, rand)
>shuffle(beg, end, Uniform_rand)
Осуществляет перестановку элементов исходной последовательности в случайном порядке. Перетасовывает элементы в исходной последовательности. Вторая версия получает вызываемый объект, получающий положительное целочисленное значение и возвращающий случайное целое число в диапазоне от нуля до за данного значения с равномерным распределением. Третий аргумент должен отвечать требованиям равномерного генератора случайных чисел (см. раздел 17.4). Все три версии возвращают тип