×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 708 из 714 Настройки
, >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). Все три версии возвращают тип