На этом шаге мы приведем общие сведения об алгоритмах.
Алгоритмы обрабатывают данные, содержащиеся в контейнерах. Несмотря на то, что каждый контейнер обеспечивает поддержку собственных базовых операций, стандартные алгоритмы позволяют выполнять более расширенные или более сложные действия. Они также позволяют работать с двумя различными типами контейнеров одновременно. Для получения доступа к алгоритмам библиотеки STL необходимо включить в программу заголовок <algorithm>.
В библиотеке STL определено множество алгоритмов, которые описаны в таблице 1. Все эти алгоритмы представляют собой шаблонные функции. Это означает, что их можно применять к контейнеру любого типа.
Алгоритм | Назначение |
---|---|
adjacent_find | Выполняет поиск совпадающих смежных элементов внутри последовательности и возвращает итератор для первого найденного совпадения |
binary_search | Выполняет двоичный поиск заданного значения внутри упорядоченной последовательности |
copy | Копирует последовательность |
copy_backward | Аналогичен алгоритму copy, за исключением того, что копирование происходит в обратном порядке, т.е. сначала перемещаются элементы, находящиеся в конце последовательности |
count | Возвращает количество элементов с заданным значением в последовательности |
count_if | Возвращает количество элементов, которые удовлетворяют заданному предикату |
equal | Определяет одинаковы ли два диапазона |
equal_range | Возвращает диапазон, в который можно вставить элемент, не нарушая порядок некоторой последовательности |
fill и fill_n | Заполняют диапазон заданным значением |
find | В заданном диапазоне выполняет поиск заданного значения и возвращает итератор для первого вхождения найденного элемента |
find_end | В заданном диапазоне выполняет поиск заданной последовательности. Возвращает итератор, соответствующий концу искомой последовательности |
find_first_of | Выполняет поиск первого элемента внутри заданной последовательности, который совпадает с любым элементом из заданного диапазона |
find_if | В заданном диапазоне выполняет поиск элемента, для которого определенный пользователем унарный предикат возвращает значение true |
for_each | Применяет заданную функцию к заданному диапазону элементов |
generate и generate_n | Присваивают значения, возвращаемые некоторой функцией генератором, элементам из заданного диапазона |
includes | Устанавливает факт включения всех элементов одной заданной последовательности в другую заданную последовательность |
inplace_merge | Объединяет один заданный диапазон с другим. Оба диапазона должны быть отсортированы в порядке возрастания. После выполнения алгоритма полученная последовательность сортируется в порядке возрастания |
iter_swap | Меняет местами значения, адресуемые итераторами, которые передаются в качестве параметров |
lexicographical_compare | Сравнивает одну заданную последовательность с другой в лексикографическом порядке |
lower_bound | Выполняет поиск первого элемента в заданной последовательности, значение которого не меньше заданного значения |
make_heap | Создает кучу из заданной последовательности |
max | Возвращает максимальное из двух значений |
max_element | Возвращает итератор для максимального элемента внутри заданного диапазона |
merge | Объединяет две упорядоченные последовательности, помещая результат в третью последовательность |
min | Возвращает минимальное из двух значений |
min_element | Возвращает итератор для минимального элемента внутри заданного диапазона |
mismatch | Выполняет поиск первого несовпадения элементов в двух последовательностях и возвращает итераторы для этих двух элементов |
next_permutation | Создает следующую перестановку заданной последовательности |
nth_element | Упорядочивает заданную последовательность таким образом, чтобы все элементы, значения которых меньше значения E, размещались перед этим элементом, а все элементы, значения которых больше значения E, размещались после него |
partial_sort | Сортирует заданный диапазон |
partial_sort_copy | Сортирует заданный диапазон, а затем копирует столько элементов, сколько может поместиться в результирующую последовательность |
partition | Сортирует заданную последовательность таким образом, чтобы все элементы, для которых заданный предикат возвращает значение true, размещались перед элементами, для которых этот предикат возвращает значение false |
pop_heap | Меняет местами первый и предпоследний элементы заданного диапазона, а затем перестраивает кучу |
prev_permutation | Создает предыдущую перестановку последовательности |
push_heap | Помещает элемент в конец кучи |
random_shuffle | Придает случайный характер заданной последовательности |
remove, remove_if, remove_copy и remove_copy_if |
Удаляют элементы из заданного диапазона |
replace, replace_copy, replace_if и replace_copy_if |
Заменяют заданные элементы из диапазона другими элементами |
reverse и reverse_copy | Меняет порядок следования элементов в заданном диапазоне на противоположный |
rotate и rotate_copy | Выполняет циклический сдвиг влево элементов в заданном диапазоне |
search | Выполняет поиск одной последовательности внутри другой |
search_n | Внутри некоторой последовательности выполняет поиск заданного числа подобных элементов |
set_difference | Создает последовательность, которая содержит разность двух упорядоченных множеств |
set_intersection | Создает последовательность, которая содержит пересечение двух упорядоченных множеств |
set_symmetric_difference | Создает последовательность, которая содержит симметричную разность двух упорядоченных множеств |
set_union | Создает последовательность, которая содержит объединение двух упорядоченных множеств |
sort | Сортирует заданный диапазон |
sort_heap | Сортирует кучу в заданном диапазоне |
stable_partition | Упорядочивает заданную последовательность таким образом, чтобы все элементы, для которых заданный предикат возвращает значение true, размещались перед элементами, для которых этот предикат возвращает false. Такое разбиение является стабильным, что означает сохранение относительного порядка последовательности |
stable_sort | Выполняет устойчивую (стабильную) сортировку заданного диапазона. Это значит, что равные элементы не переставляются |
swap | Меняет местами заданные два значения |
swap_ranges | Выполняет обмен элементов в заданном диапазоне |
transform | Применяет функцию к заданному диапазону элементов и сохраняет результат в новой последовательности |
unique и unique_copy | Удаляет повторяющиеся элементы из заданного диапазона |
upper_bound | Находит последний элемент в заданной последовательности, который не больше заданного значения |
На следующем шаге мы рассмотрим пример использования некоторых из перечисленных алгоритмов.