partial_sort(beg, mid, end, comp)
Сортирует набор элементов, количество которых равно mid-beg
. То есть если mid-beg
равно 42, эта функция помещает элементы с самыми низкими значениями, в отсортированном порядке, в первые 42 позиции последовательности. После завершения работы алгоритма partial_sort()
окажутся отсортированы элементы в диапазоне от beg
и далее, но не включая mid
. Ни один из элементов в отсортированном диапазоне не больше, чем любой из элементов в диапазоне после mid
. Порядок неотсортированных элементов не определен.
partial_sort_copy(beg, end, destBeg, destEnd)
partial_sort_copy(beg, end, destBeg, destEnd, comp)
Сортирует элементы исходного диапазона и помещает их (в отсортированном порядке) в последовательность, указанную итераторами destBeg
и destEnd
. Если получающий диапазон имеет тот же размер или превосходит исходный, в него сохраняется весь исходный диапазон в отсортированном виде, начиная с позиции destBeg
. Если размер получающего диапазона меньше, в него будет скопировано столько отсортированных элементов, сколько поместится.
Алгоритм возвращает итератор в получающем диапазоне, указывающий на следующий элемент после последнего отсортированного. Если получающая последовательность меньше исходного диапазона или равна ему по размеру, будет возвращен итератор destEnd
.
nth_element(beg, nth, end)
nth_element(beg, nth, end, comp)
Аргумент nth
должен быть итератором, указывающим на элемент в исходной последовательности. Обозначенный этим итератором элемент после выполнения алгоритма nth_element
имеет значение, которое находилось бы там после сортировки всей последовательности. Кроме того, элементы контейнера вокруг позиции nth
также отсортированы: перед ней располагается значение меньше или равное значению в позиции nth
, а после нее значение, большее или равное.
А.2.6. Общие функции изменения порядка
Некоторые алгоритмы переупорядочивают элементы исходной последовательности. Первые два, remove()
и unique()
, переупорядочивают последовательность так, чтобы элементы в первой части удовлетворяли некоему критерию. Они возвращают итератор, отмечающий конец этой подпоследовательности. Другие, например reverse()
, 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
.