Поделиться через


<algorithm>

Определяет выполняющие алгоритмы функции шаблонов контейнера из стандартной библиотеки шаблонов (STL).

(see relevant links below for specific algorithm syntax)

Заметки

Алгоритмы STL универсальны, поскольку они могут работать с различными структурами данных. Структуры данных, с которыми они могут работать, включают в себя не только классы контейнеров STL, такие как vector и list, но также определенные программой структуры данных и массивы элементов, удовлетворяющие требованиям определенного алгоритма. Алгоритмы STL достигают такого уровня универсальности путем получения доступа к элементам контейнера и их просмотра опосредованным образом через итераторы.

Алгоритмы STL обрабатывают диапазоны итератора, которые обычно определяются их начальными или конечными позициями. Указанные диапазоны должны быть допустимы в том смысле, что все указатели в диапазонах должны поддерживать удаление ссылок и в рамках последовательностей каждого диапазона последняя позиция должна быть доступна из первой путем приращения.

Алгоритмы STL расширяют действия, поддерживаемые операциями и функциями-членами каждого контейнера STL, и позволяют работать, например, с различными типами объектов контейнера одновременно. Два суффикса использовалось, чтобы передавать сведения о назначении алгоритмов.

  • Суффикс _if указывает, что алгоритм работает с объектами функций, действующих для значений элементов, а не с самими значениями элементов. Алгоритм find_if выполняет поиск элементов, значения которых удовлетворяют критерию, заданному объектом функции, а алгоритм find ищет определенное значение.

  • Суффикс _copy означает, что этот алгоритм не только манипулирует значениями элементов, но также копирует измененные значения в диапазон назначения. Алгоритм reverse изменяет порядок элементов в диапазоне на обратный, а алгоритм reverse_copy также копирует результат в диапазон назначения.

Алгоритмы STL часто делятся на группы, указывающие какие-либо сведения об их целях или требованиях. Они включают как изменяющие алгоритмы (то есть алгоритмы, изменяющие значения элементов), так и неизменяющие. Изменяющие алгоритмы меняют порядок элементов, но не значения элементов. Удаляющие алгоритмы могут исключать элементы из диапазона или копии диапазона. Сортирующие алгоритмы меняют порядок элементов в диапазонах различными способами, а алгоритмы сортированных диапазонов воздействуют только на диапазоны, элементы которых были отсортированы каким-либо образом.

Числовые алгоритмы STL, которые предоставляются для числовой обработки, обладают своим файлом заголовка <numeric>, а объекты функций и переходники определяются в заголовке <functional>. Объекты функций, возвращающие логические значения, называются предикатами. Заданным по умолчанию бинарным предикатом является сравнение operator<. В целом, упорядочиваемые элементы должны подлежать сравнению "меньше чем", чтобы, имея два элемента, можно было определить, что они равны (ни один не меньше другого) или что один меньше другого. Это приводит к упорядочиванию неравнозначных элементов.

Функции

adjacent_find

Поиск двух соседних элементов, которые либо равны, либо удовлетворяют указанному условию.

all_of

Возвращает значение true, если условие выполняется каждым элементом заданного диапазона.

any_of

Возвращает значение true, если условие выполняется хотя бы один раз в указанном диапазоне элементов.

binary_search

Проверяет, есть ли в отсортированном диапазоне элемент, равный указанному значению или эквивалентный ему в смысле, заданном двоичным предикатом.

copy

Присваивает значения элементов из исходного диапазона диапазону назначения, выполняя итерации в исходной последовательности элементов и присваивая им новые позиции в прямом направлении.

copy_backward

Присваивает значения элементов из исходного диапазона диапазону назначения, выполняя итерации в исходной последовательности элементов и присваивая им новые позиции в обратном направлении.

copy_if

Копирует все элементы в заданном диапазоне, возвращающие true для заданного условия

copy_n

Копирует указанное количество элементов.

count

Возвращает количество элементов в диапазоне, значения которых соответствуют заданному значению.

count_if

Возвращает количество элементов в диапазоне, значения которых соответствуют заданному условию.

equal

Сравнивает два диапазона поэлементно либо на признак равенства или равноценности в смысле, заданном бинарным предикатом.

equal_range

Находит пару позиций в упорядоченном диапазоне; первая из них меньше или равна позиции указанного элемента, а вторая — больше позиции элемента, где суть равноценности или порядка, используемая, чтобы установить позиции в последовательности, может быть задана бинарным предикатом.

fill

Присваивает одно и то же новое значение каждому элементу в заданном диапазоне.

fill_n

Присваивает новое значение указанному количеству элементов в диапазоне, начиная с определенного элемента.

find

Находит позицию первого вхождения элемента с заданным значением в диапазон.

find_end

Ищет в диапазоне последнюю подпоследовательность, совпадающую с заданной последовательностью, или равноценную в смысле, определенном бинарным предикатом.

find_first_of

Выполняет поиск первого вхождения любого из нескольких значений в заданный диапазон или первого вхождения любого из нескольких элементов, равноценных в смысле, заданном бинарным предикатом, в указанный набор элементов.

find_if

Находит позицию первого вхождения элемента, удовлетворяющего определенному условию, в диапазон.

find_if_not

Возвращает первый элемент, который не удовлетворяет условию, в указанном диапазоне.

for_each

Применяет заданный объект функции к каждому элементу в прямом порядке в пределах диапазона и возвращает объект функции.

generate

Присваивает значения, создаваемые объектом функции, каждому элементу в диапазоне.

generate_n

Присваивает значения, создаваемые объектом функции, указанному количеству элементов в диапазон и возвращается на позицию, следующую за последним присвоенным значением.

includes

Проверяет, содержит ли один отсортированный диапазон все элементы, содержащиеся во втором отсортированном диапазоне, где порядок сортировки или критерий эквивалентности элементов можно задать бинарным предикатом.

inplace_merge

Объединяет элементы из двух последовательных упорядоченных диапазонов в один упорядоченный диапазон, где критерий порядка сортировки может быть указан бинарным предикатом.

is_heap

Возвращает значение true, если элементы в указанном диапазоне образуют кучу.

is_heap_until

Возвращает значение true, если указанный диапазон образует кучу до последнего элемента.

is_partitioned

Возвращает значение true, если все элементы в заданном диапазоне, возвращающие true для какого-либо условия, расположены перед всеми элементами, возвращающими false.

is_permutation

Определяет, образуют ли элементы в заданном диапазоне допустимую перестановку.

is_sorted

Возвращает значение true, если элементы в указанном диапазоне расположены в порядке сортировки.

is_sorted_until

Возвращает значение true, если элементы в указанном диапазоне расположены в порядке сортировки.

iter_swap

Меняет местами два значения, указанные парой определенных итераторов.

lexicographical_compare

Сравнивает две последовательности поэлементно для определения того, какой элемент из двух меньше.

lower_bound

Находит позицию первого элемента в упорядоченном диапазоне, значение которого больше или равно указанному значению, где критерий упорядочивания может быть задан бинарным предикатом.

make_heap

Преобразует элементы из указанного диапазона в кучу, в которой первый элемент является наибольшим и для которой критерий сортировки может быть определен бинарным предикатом.

max

Сравнивает два объекта и возвращает больший из них, где критерий упорядочивания может быть указан бинарным предикатом.

max_element

Находит первое вхождение наибольшего элемента в указанном диапазоне, где критерий упорядочивания может быть указан бинарным предикатом.

слияние

Объединяет все элементы из двух исходных упорядоченных диапазонов в один упорядоченный диапазон назначения, где критерий порядка сортировки может быть указан бинарным предикатом.

min

Сравнивает два объекта и возвращает меньший из них, где критерий упорядочивания может быть указан бинарным предикатом.

min_element

Находит первое вхождение наименьшего элемента в указанном диапазоне, где критерий упорядочивания может быть указан бинарным предикатом.

minmax

Сравнивает два входных параметра и возвращает их в виде пары, в порядке от меньшего к большему.

minmax_element

Выполняет работу, которую делают min_element и max_element, в одном вызове.

mismatch

Сравнивает два диапазона поэлементно либо на равенство или равноценность в смысле, заданном бинарным предикатом, и находит первую позицию, где наблюдается разница.

<alg> move

Перемещает элементы, связанные с заданным диапазоном.

move_backward

Перемещает элементы одного итератора в другой. Перемещение начинается с последнего элементом в указанном диапазоне и завершается первым элементом в этом диапазоне.

next_permutation

Изменяет порядок элементов в диапазоне, чтобы исходный порядок был заменен перестановкой "лексикографически следующий больший", если такая существует, где смысл термина "следующий" может быть задан бинарным предикатом.

none_of

Возвращает значение true, если условие не выполняется ни одним элементом заданного диапазона.

nth_element

Разделяет диапазон элементов, правильно находя n-ый элемент последовательности в диапазоне, чтобы все элементы перед ним были меньше или равны ему, а все элементы в последовательности после него больше либо равны ему.

partial_sort

Упорядочивает указанное число меньших элементов в диапазоне в не нисходящий порядок или согласно критерию упорядочивания, заданному бинарным предикатом.

partial_sort_copy

Копирует элементы из исходного диапазона в диапазон назначения, где исходные элементы упорядочены по критерию "меньше либо равно" или согласно другому заданному бинарному предикату.

partition

Разделяет элементы диапазона на два непересекающихся множества, при этом элементы, удовлетворяющие унарному предикату, расположены перед теми, которые ему не удовлетворяют.

partition_copy

Копирует элементы, возвращающие true для какого-либо условия, в одно место назначения, а возвращающие false — в другое. Эти элементы должны поступать из указанного диапазона.

partition_point

Возвращает первый элемент, который не удовлетворяет условию, в данном диапазоне. Элементы сортируются так, чтобы те, которые соответствуют условию, располагались перед теми, что не соответствуют.

pop_heap

Удаляет наибольший элемент из начала кучи до позиции, следующей за последней, в диапазоне, а затем формирует новую кучу из оставшихся элементов.

prev_permutation

Изменяет порядок элементов в диапазоне, чтобы исходный порядок был заменен перестановкой "лексикографически следующий больший", если такая существует, где смысл термина "следующий" может быть задан бинарным предикатом.

push_heap

Добавляет элемент, находящийся в конце диапазона, в существующую кучу, состоящую из предыдущих элементов диапазона.

random_shuffle

Выполняет переупорядочивание последовательности N элементов в диапазоне в одном из N! возможных порядков, выбранном случайным образом.

remove

Удаляет указанное значение из заданного диапазона без нарушения порядка остальных элементов и возвращает конец нового диапазона после удаления указанного значения.

remove_copy

Копирует элементы из исходного диапазона в диапазон назначения за исключением того, что элементы с заданным значением не копируются, не нарушая порядок остальных элементов и возвращая конец нового диапазона назначения.

remove_copy_if

Копирует элементы из исходного диапазона в диапазон назначения за исключением того, что элементы, соответствующие предикату, не копируются, не нарушая порядок остальных элементов и возвращая конец нового диапазона назначения.

remove_if

Удаляет элементы, соответствующие предикату, из заданного диапазона без нарушения порядка остальных элементов и возвращает конец нового диапазона после удаления указанного значения.

replace

Проверяет каждый элемент в диапазоне и заменяет его, если он соответствует заданному значению.

replace_copy

Проверяет каждый элемент в исходном диапазоне и заменяет его, если он соответствует заданному значению, одновременно копируя результат в новый диапазон назначения.

replace_copy_if

Проверяет каждый элемент в исходном диапазоне и заменяет его, если он соответствует заданному предикату, одновременно копируя результат в новый диапазон назначения.

replace_if

Проверяет каждый элемент в диапазоне и заменяет его, если он соответствует заданному предикату.

reverse

Изменяет порядок элементов в диапазоне на обратный.

reverse_copy

Изменяет порядок элементов в исходном диапазоне на обратный, одновременно копируя их в диапазон назначения

rotate

Меняет местами элементы в двух соседних диапазонах.

rotate_copy

Меняет местами элементы в двух соседних диапазонах в пределах исходного диапазона и копирует результат в диапазон назначения.

search

Выполняет поиск первого вхождения последовательности в целевой диапазон, элементы которого равны указанным в заданной последовательности элементов или элементы которого равноценны в смысле, заданным бинарным предикатом, элементам в заданной последовательности.

search_n

Выполняет поиск первой подпоследовательности в диапазоне заданного числа элементов, имеющих определенное значение или связанных с этим значением отношением, указанным бинарным предикатом.

set_difference

Объединяет все элементы, принадлежащие одному отсортированному исходному диапазону, но не второму отсортированному исходному диапазону, в один отсортированный диапазон назначения, где критерий упорядочивания может быть указан бинарным предикатом.

set_intersection

Объединяет все элементы, входящие в оба исходных упорядоченных диапазона, в один упорядоченный диапазон назначения, где критерий порядка сортировки может быть указан бинарным предикатом.

set_symmetric_difference

Объединяет все элементы, входящие в один, но не в оба исходных упорядоченных диапазона, в один упорядоченный диапазон назначения, где критерий порядка сортировки может быть указан бинарным предикатом.

set_union

Объединяет все элементы, входящие в хотя бы один из двух исходных упорядоченных диапазонов, в один упорядоченный диапазон назначения, где критерий порядка сортировки может быть указан бинарным предикатом.

sort

Упорядочивает элементы в указанном диапазоне в не нисходящем порядке или согласно критерию упорядочивания, заданному бинарным предикатом.

shuffle

Перемешивает (изменяет порядок) элементы в указанном диапазоне, используя генератор случайных чисел.

sort_heap

Преобразует кучу в упорядоченный диапазон.

stable_partition

Разделяет элементы диапазона на два непересекающихся множества, при этом элементы, удовлетворяющие унарному предикату, расположены перед теми, которые ему не удовлетворяют, с сохранением относительного порядка равноценных элементов.

stable_sort

Упорядочивает элементы в указанном диапазоне в не нисходящем порядке или согласно критерию упорядочивания, заданному бинарным предикатом, и сохраняет относительный порядок равноценных элементов.

буфер обмена

Меняет местами значения элементов между двумя типами объектов, присваивая содержимое первого объекта второму объекту, а содержимое второго — первому.

swap_ranges

Меняет местами элементы одного диапазона с элементами другого диапазона такого же размера.

преобразование

Применяет заданный объект функции к каждому элементу в исходном диапазоне или к паре элементов из двух исходных диапазонов и копирует возвращаемые значения объекта функции в диапазон назначения.

unique

Удаляет повторяющиеся элементы, расположенные в указанном диапазоне рядом друг с другом.

unique_copy

Копирует элементы из исходного диапазона в диапазон назначения за исключением повторяющихся элементов, расположенных рядом друг с другом.

upper_bound

Находит позицию первого элемента в упорядоченном диапазоне, который имеет значение больше указанного значения, где критерий упорядочивания может быть задан бинарным предикатом.

См. также

Ссылки

Потокобезопасность в стандартной библиотеке C++

Библиотека стандартных шаблонов

Другие ресурсы

Файлы заголовков стандартных библиотек C++