Библиотека алгоритмов
Библиотека алгоритмов определяет функции для различных целей (например, поиск, сортировка, подсчёт, манипуляции), которые работают с диапазонами элементов. Обратите внимание, что диапазон определяется как [first, last) где last относится к элементу после последнего элемента для проверки или изменения.
Ограниченные алгоритмыC++20 предоставляет ограниченные версии большинства алгоритмов в пространстве имён std::vector<int> v {7, 1, 4, 0, -1};
std::ranges::sort(v); // constrained algorithm | (с C++20) |
Политики выполненияБольшинство алгоритмов имеют перегрузки, которые принимают политики выполнения. Алгоритмы стандартной библиотеки поддерживают несколько политик выполнения, и библиотека предоставляет соответствующие типы и объекты политик выполнения. Пользователи могут статически выбрать политику выполнения, вызвав параллельный алгоритм с объектом политики выполнения соответствующего типа. Реализации стандартной библиотеки (но не пользователи) могут определять дополнительные политики выполнения в качестве расширения. Семантика параллельных алгоритмов, вызываемых с объектом политики выполнения заданного реализацией типа, определяется реализацией. Параллельные версии алгоритмов (за исключением
| (с C++17) | |||||||||||||||||||||||||||
Неизменяющие операции над последовательностями
Операции с наборами
Определено в заголовке <algorithm> |
|
|---|---|
| применяет функцию к диапазону элементов (функциональный шаблон) |
|
|
(C++20) | применяет функцию к диапазону элементов (niebloid) |
|
(C++17) | применяет объект функции к первым N элементам последовательности (функциональный шаблон) |
|
(C++20) | применяет объект функции к первым N элементам последовательности (niebloid) |
Операции поиска
Определено в заголовке <algorithm> |
|
|---|---|
|
(C++11)(C++11)(C++11) | проверяет, является ли предикат true для всех, любого или ни одного из элементов в диапазоне (функция-шаблон) |
|
(C++20)(C++20)(C++20) | проверяет, является ли предикат true для всех, любого или ни одного из элементов в диапазоне(niebloid) |
|
(C++23)(C++23) | проверяет, содержит ли диапазон заданный элемент или поддиапазон (niebloid) |
|
(C++11) | находит первый элемент, удовлетворяющий определенным критериям (функция-шаблон) |
|
(C++20)(C++20)(C++20) | находит первый элемент, удовлетворяющий определенным критериям (niebloid) |
|
(C++23)(C++23)(C++23) | находит последний элемент, удовлетворяющий определенным критериям (niebloid) |
| находит последнюю последовательность элементов в определенном диапазоне (функция-шаблон) |
|
|
(C++20) | находит последнюю последовательность элементов в определенном диапазоне (niebloid) |
| ищет любой из набора элементов (функция-шаблон) |
|
|
(C++20) | ищет любой из набора элементов (niebloid) |
| находит первые два смежных элемента, которые равны (или удовлетворяют заданному предикату) (функция-шаблон) |
|
|
(C++20) | находит первые два смежных элемента, которые равны (или удовлетворяют заданному предикату) (niebloid) |
| возвращает количество элементов, удовлетворяющих определенным критериям (функция-шаблон) |
|
|
(C++20)(C++20) | возвращает количество элементов, удовлетворяющих определенным критериям (niebloid) |
| находит первую позицию, где два диапазона отличаются (функция-шаблон) |
|
|
(C++20) | находит первую позицию, где два диапазона отличаются (niebloid) |
| определяет, совпадают ли два набора элементов (функция-шаблон) |
|
|
(C++20) | определяет, совпадают ли два набора элементов (niebloid) |
| ищет диапазон элементов (функция-шаблон) |
|
|
(C++20) | ищет диапазон элементов (niebloid) |
| ищет диапазон для определенного количества последовательных копий элемента (функция-шаблон) |
|
|
(C++20) | ищет определенное количество последовательных копий элемента в диапазоне (niebloid) |
|
(C++23) | проверяет, начинается ли диапазон с другого диапазона (niebloid) |
|
(C++23) | проверяет, заканчивается ли диапазон другим диапазоном (niebloid) |
Операции свёртки
Определено в заголовке <algorithm> |
|
|---|---|
|
(C++23) | слева-складывает диапазон элементов (niebloid) |
|
(C++23) | слева-складывает диапазон элементов, используя первый элемент в качестве начального значения (niebloid) |
|
(C++23) | справа-складывает диапазон элементов (niebloid) |
|
(C++23) | справа-складывает диапазон элементов, используя последний элемент в качестве начального значения (niebloid) |
|
(C++23) | слева-складывает диапазон элементов и возвращает пару (итератор, значение) (niebloid) |
|
(C++23) | слева-складывает диапазон элементов, используя первый элемент в качестве начального значения, и возвращает пару (итератор, необязательный) (niebloid) |
Изменяющие операции над последовательностями
Операции копирования
Определено в заголовке <algorithm> |
|
|---|---|
|
(C++11) | копирует диапазон элементов в новое местоположение (функция-шаблон) |
|
(C++20)(C++20) | копирует диапазон элементов в новое местоположение (niebloid) |
|
(C++11) | копирует заданное количество элементов в новое местоположение (функция-шаблон) |
|
(C++20) | копирует заданное количество элементов в новое местоположение (niebloid) |
| копирует диапазон элементов в обратном порядке (функция-шаблон) |
|
|
(C++20) | копирует диапазон элементов в обратном порядке (niebloid) |
|
(C++11) | перемещает диапазон элементов в новое местоположение (функция-шаблон) |
|
(C++20) | перемещает диапазон элементов в новое местоположение (niebloid) |
|
(C++11) | перемещает диапазон элементов в новое местоположение в обратном порядке (функция-шаблон) |
|
(C++20) | перемещает диапазон элементов в новое местоположение в обратном порядке (niebloid) |
Операции обмена
Определено в заголовке <algorithm> |
|
|---|---|
| меняет значения двух объектов (функция-шаблон) |
|
| меняет два диапазона элементов (функция-шаблон) |
|
|
(C++20) | меняет два диапазона элементов (niebloid) |
| меняет элементы, на которые указывают два итератора (функция-шаблон) |
|
Операции преобразования
Определено в заголовке <algorithm> |
|
|---|---|
| применяет функцию к диапазону элементов, сохраняя результаты в целевом диапазоне (функция-шаблон) |
|
|
(C++20) | применяет функцию к диапазону элементов (niebloid) |
| заменяет все значения, удовлетворяющие определенным критериям, другим значением (функция-шаблон) |
|
|
(C++20)(C++20) | заменяет все значения, удовлетворяющие определенным критериям, другим значением (niebloid) |
| копирует диапазон, заменяя элементы, удовлетворяющие определенным критериям, другим значением (функция-шаблон) |
|
|
(C++20)(C++20) | копирует диапазон, заменяя элементы, удовлетворяющие определенным критериям, другим значением (niebloid) |
Операции генерации
Определено в заголовке <algorithm> |
|
|---|---|
| копирует заданное значение во все элементы в диапазоне (шаблон функции) |
|
|
(C++20) | присваивает диапазону элементов определенное значение (niebloid) |
| копирует заданное значение в N элементов в диапазоне (шаблон функции) |
|
|
(C++20) | присваивает значение определенному числу элементов (niebloid) |
| присваивает результаты последовательных вызовов функции каждому элементу в диапазоне (шаблон функции) |
|
|
(C++20) | сохраняет результат функции в диапазоне (niebloid) |
| присваивает результаты последовательных вызовов функции N элементам в диапазоне (шаблон функции) |
|
|
(C++20) | сохраняет результат N применений функции (niebloid) |
Операции удаления
Определено в заголовке <algorithm> |
|
|---|---|
| удаляет элементы, удовлетворяющие определенным критериям (шаблон функции) |
|
|
(C++20)(C++20) | удаляет элементы, удовлетворяющие определенным критериям (niebloid) |
| копирует диапазон элементов, опуская те, которые удовлетворяют определенным критериям (шаблон функции) |
|
|
(C++20)(C++20) | копирует диапазон элементов, опуская те, которые удовлетворяют определенным критериям (niebloid) |
| удаляет последовательные дубликаты элементов в диапазоне (шаблон функции) |
|
|
(C++20) | удаляет последовательные дубликаты элементов в диапазоне (niebloid) |
| создает копию некоторого диапазона элементов, не содержащего последовательных дубликатов (шаблон функции) |
|
|
(C++20) | создает копию некоторого диапазона элементов, не содержащего последовательных дубликатов (niebloid) |
Операции изменения порядка
Определено в заголовке <algorithm> |
|
|---|---|
| изменяет порядок элементов в диапазоне на обратный (шаблон функции) |
|
|
(C++20) | изменяет порядок элементов в диапазоне на обратный (niebloid) |
| создает копию диапазона с измененным порядком на обратный (шаблон функции) |
|
|
(C++20) | создает копию диапазона с измененным порядком на обратный (niebloid) |
| вращает порядок элементов в диапазоне (шаблон функции) |
|
|
(C++20) | вращает порядок элементов в диапазоне (niebloid) |
| копирует и вращает диапазон элементов (шаблон функции) |
|
|
(C++20) | копирует и вращает диапазон элементов (niebloid) |
|
(C++20) | сдвигает элементы в диапазоне (шаблон функции) |
|
(до C++17)(C++11) | случайным образом меняет порядок элементов в диапазоне (шаблон функции) |
|
(C++20) | случайным образом меняет порядок элементов в диапазоне (niebloid) |
|
(C++23) | сдвигает элементы в диапазоне (niebloid) |
Операции выборки
Определено в заголовке <algorithm> |
|
|---|---|
|
(C++17) | выбирает N случайных элементов из последовательности (шаблон функции) |
|
(C++20) | выбирает N случайных элементов из последовательности (niebloid) |
Сортировка и связанные операции
Требования
Некоторые алгоритмы требуют, чтобы последовательность, представленная аргументами, была «отсортирована» или «разделена». Поведение является неопределенным, если требование не выполняется.
| Последовательность отсортирована относительно компаратора | (до C++20) |
| Последовательность отсортирована относительно Последовательность отсортирована относительно компаратора | (с C++20) |
Последовательность [start, finish) разделена относительно выражения f(e), если существует целое число n такое, что для всех i в [0, std::distance(start, finish)), f(*(start + i))[1] является true тогда и только тогда, когда i < n.
-
iter + nпросто означает «результатiter, инкрементированногоnраз», независимо от того, является лиiterитератором произвольного доступа.
Операции разделения
Определено в заголовке <algorithm> |
|
|---|---|
|
(C++11) | определяет, является ли диапазон разделимым заданным предикатом (шаблон функции) |
|
(C++20) | определяет, является ли диапазон разделимым заданным предикатом (niebloid) |
| делит диапазон элементов на две группы (шаблон функции) |
|
|
(C++20) | делит диапазон элементов на две группы (niebloid) |
|
(C++11) | копирует диапазон, деля элементы на две группы (шаблон функции) |
|
(C++20) | копирует диапазон, деля элементы на две группы (niebloid) |
| делит элементы на две группы, сохраняя их относительный порядок (шаблон функции) |
|
|
(C++20) | делит элементы на две группы, сохраняя их относительный порядок (niebloid) |
|
(C++11) | находит точку разделения разделимого диапазона (шаблон функции) |
|
(C++20) | находит точку разделения разделимого диапазона (niebloid) |
Операции сортировки
Определено в заголовке <algorithm> |
|
|---|---|
| сортирует диапазон в порядке возрастания (шаблон функции) |
|
|
(C++20) | сортирует диапазон в порядке возрастания (niebloid) |
| сортирует диапазон элементов, сохраняя порядок между равными элементами (шаблон функции) |
|
|
(C++20) | сортирует диапазон элементов, сохраняя порядок между равными элементами (niebloid) |
| сортирует первые N элементов диапазона (шаблон функции) |
|
|
(C++20) | сортирует первые N элементов диапазона (niebloid) |
| копирует и частично сортирует диапазон элементов (шаблон функции) |
|
|
(C++20) | копирует и частично сортирует диапазон элементов (niebloid) |
|
(C++11) | проверяет, отсортирован ли диапазон в порядке возрастания (шаблон функции) |
|
(C++20) | проверяет, отсортирован ли диапазон в порядке возрастания (niebloid) |
|
(C++11) | находит наибольший отсортированный поддиапазон (шаблон функции) |
|
(C++20) | находит наибольший отсортированный поддиапазон (niebloid) |
| частично сортирует заданный диапазон, гарантируя, что он разбит заданным элементом (шаблон функции) |
|
|
(C++20) | частично сортирует заданный диапазон, гарантируя, что он разбит заданным элементом (niebloid) |
Операции бинарного поиска (для разбиения диапазонов)
Определено в заголовке <algorithm> |
|
|---|---|
| возвращает итератор на первый элемент, не меньший данного значения (шаблон функции) |
|
|
(C++20) | возвращает итератор на первый элемент, не меньший данного значения (niebloid) |
| возвращает итератор на первый элемент, больший определенного значения (шаблон функции) |
|
|
(C++20) | возвращает итератор на первый элемент, больший определенного значения (niebloid) |
| возвращает диапазон элементов, соответствующих определенному ключу (шаблон функции) |
|
|
(C++20) | возвращает диапазон элементов, соответствующих определенному ключу (niebloid) |
| определяет, существует ли элемент в частично упорядоченном диапазоне (шаблон функции) |
|
|
(C++20) | определяет, существует ли элемент в частично упорядоченном диапазоне (niebloid) |
Операции над множествами (для отсортированных диапазонов)
Определено в заголовке <algorithm> |
|
|---|---|
возвращает true , если одна последовательность является подпоследовательностью другой (шаблон функции) |
|
|
(C++20) | возвращает true , если одна последовательность является подпоследовательностью другой(niebloid) |
| вычисляет объединение двух множеств (шаблон функции) |
|
|
(C++20) | вычисляет объединение двух множеств (niebloid) |
| вычисляет пересечение двух множеств (шаблон функции) |
|
|
(C++20) | вычисляет пересечение двух множеств (niebloid) |
| вычисляет разность между двумя множествами (шаблон функции) |
|
|
(C++20) | вычисляет разность между двумя множествами (niebloid) |
| вычисляет симметрическую разность между двумя множествами (шаблон функции) |
|
|
(C++20) | вычисляет симметрическую разность между двумя множествами (niebloid) |
Операции слияния (над отсортированными диапазонами)
Определено в заголовке <algorithm> |
|
|---|---|
| сливает два отсортированных диапазона (шаблон функции) |
|
|
(C++20) | сливает два отсортированных диапазона (niebloid) |
| сливает два упорядоченных диапазона на месте (шаблон функции) |
|
|
(C++20) | сливает два упорядоченных диапазона на месте (niebloid) |
Операции с кучей
Определено в заголовке <algorithm> |
|
|---|---|
| добавляет элемент в кучу максимального значения (шаблон функции) |
|
|
(C++20) | добавляет элемент в кучу максимального значения (niebloid) |
| удаляет наибольший элемент из кучи максимального значения (шаблон функции) |
|
|
(C++20) | удаляет наибольший элемент из кучи максимального значения (niebloid) |
| создаёт кучу максимального значения из диапазона элементов (шаблон функции) |
|
|
(C++20) | создаёт кучу максимального значения из диапазона элементов (niebloid) |
| преобразует кучу максимального значения в диапазон элементов, отсортированных в порядке возрастания (шаблон функции) |
|
|
(C++20) | преобразует кучу максимального значения в диапазон элементов, отсортированных в порядке возрастания (niebloid) |
|
(C++11) | проверяет, является ли заданный диапазон кучей максимального значения (шаблон функции) |
|
(C++20) | проверяет, является ли заданный диапазон кучей максимального значения (niebloid) |
|
(C++11) | находит наибольший поддиапазон, являющийся кучей максимального значения (шаблон функции) |
|
(C++20) | находит наибольший поддиапазон, являющийся кучей максимального значения (niebloid) |
Минимальные/максимальные операции
Определено в заголовке <algorithm> |
|
|---|---|
| возвращает большее из заданных значений (шаблон функции) |
|
|
(C++20) | возвращает большее из заданных значений (niebloid) |
| возвращает наибольший элемент в диапазоне (шаблон функции) |
|
|
(C++20) | возвращает наибольший элемент в диапазоне (niebloid) |
| возвращает меньшее из заданных значений (шаблон функции) |
|
|
(C++20) | возвращает меньшее из заданных значений (niebloid) |
| возвращает наименьший элемент в диапазоне (шаблон функции) |
|
|
(C++20) | возвращает наименьший элемент в диапазоне (niebloid) |
|
(C++11) | возвращает меньший и больший из двух элементов (шаблон функции) |
|
(C++20) | возвращает меньший и больший из двух элементов (niebloid) |
|
(C++11) | возвращает наименьший и наибольший элементы в диапазоне (шаблон функции) |
|
(C++20) | возвращает наименьший и наибольший элементы в диапазоне (niebloid) |
|
(C++17) | ограничивает значение между парой граничных значений (шаблон функции) |
|
(C++20) | ограничивает значение между парой граничных значений (niebloid) |
Лексикографические операции сравнения
Определено в заголовке <algorithm> |
|
|---|---|
возвращает true если один диапазон лексикографически меньше другого (шаблон функции) |
|
|
(C++20) | возвращает true если один диапазон лексикографически меньше другого(niebloid) |
|
(C++20) | сравнивает два диапазона с помощью трехстороннего сравнения (шаблон функции) |
Операции перестановок
Определено в заголовке <algorithm> |
|
|---|---|
| генерирует следующее большее лексикографическое перестановку диапазона элементов (шаблон функции) |
|
|
(C++20) | генерирует следующее большее лексикографическое перестановку диапазона элементов (niebloid) |
| генерирует следующую меньшую лексикографическую перестановку диапазона элементов (шаблон функции) |
|
|
(C++20) | генерирует следующую меньшую лексикографическую перестановку диапазона элементов (niebloid) |
|
(C++11) | определяет, является ли последовательность перестановкой другой последовательности (шаблон функции) |
|
(C++20) | определяет, является ли последовательность перестановкой другой последовательности (niebloid) |
Числовые операции
Определено в заголовке <numeric> |
|
|---|---|
|
(C++11) | заполняет диапазон последовательными приращениями начального значения (шаблон функции) |
|
(C++23) | заполняет диапазон последовательными приращениями начального значения (niebloid) |
| суммирует или сворачивает диапазон элементов (шаблон функции) |
|
| вычисляет скалярное произведение двух диапазонов элементов (шаблон функции) |
|
| вычисляет разности между смежными элементами в диапазоне (шаблон функции) |
|
| вычисляет частичную сумму диапазона элементов (шаблон функции) |
|
|
(C++17) | аналогично std::accumulate, но в произвольном порядке (шаблон функции) |
|
(C++17) | аналогично std::partial_sum, исключает i-й элемент входных данных из i-й суммы (шаблон функции) |
|
(C++17) | аналогично std::partial_sum, включает i-й элемент входных данных в i-ю сумму (шаблон функции) |
|
(C++17) | применяет вызываемый объект, затем сворачивает в произвольном порядке (шаблон функции) |
|
(C++17) | применяет вызываемый объект, затем вычисляет эксклюзивное сканирование (шаблон функции) |
|
(C++17) | применяет вызываемый объект, затем вычисляет инклюзивное сканирование (шаблон функции) |
Операции с неинициализированной памятью
Определено в заголовке <memory> |
|
|---|---|
| копирует диапазон объектов в неопределённую область памяти (шаблон функции) |
|
|
(C++20) | копирует диапазон объектов в неопределённую область памяти (niebloid) |
|
(C++11) | копирует определённое количество объектов в неопределённую область памяти (шаблон функции) |
|
(C++20) | копирует определённое количество объектов в неопределённую область памяти (niebloid) |
| копирует объект в неопределённую область памяти, заданную диапазоном (шаблон функции) |
|
|
(C++20) | копирует объект в неопределённую область памяти, заданную диапазоном (niebloid) |
| копирует объект в неопределённую область памяти, заданную начальной точкой и количеством (шаблон функции) |
|
|
(C++20) | копирует объект в неопределённую область памяти, заданную начальной точкой и количеством (niebloid) |
|
(C++17) | перемещает диапазон объектов в неопределённую область памяти (шаблон функции) |
|
(C++20) | перемещает диапазон объектов в неопределённую область памяти (niebloid) |
|
(C++17) | перемещает определённое количество объектов в неопределённую область памяти (шаблон функции) |
|
(C++20) | перемещает определённое количество объектов в неопределённую область памяти (niebloid) |
|
(C++17) | создаёт объекты по умолчанию в неопределённой области памяти, заданной диапазоном (шаблон функции) |
|
(C++20) | создаёт объекты по умолчанию в неопределённой области памяти, заданной диапазоном (niebloid) |
|
(C++17) | создаёт объекты по умолчанию в неопределённой области памяти, заданной начальной точкой и количеством (шаблон функции) |
|
(C++20) | создаёт объекты по умолчанию в неопределённой области памяти, заданной начальной точкой и количеством (niebloid) |
|
(C++17) | создаёт объекты с инициализацией по значению в неопределённой области памяти, заданной диапазоном (шаблон функции) |
|
(C++20) | создаёт объекты с инициализацией по значению в неопределённой области памяти, заданной диапазоном (niebloid) |
|
(C++17) | создаёт объекты с инициализацией по значению в неопределённой области памяти, заданной начальной точкой и количеством (шаблон функции) |
|
(C++20) | создаёт объекты с инициализацией по значению в неопределённой области памяти, заданной начальной точкой и количеством (niebloid) |
|
(C++17) | уничтожает диапазон объектов (шаблон функции) |
|
(C++20) | уничтожает диапазон объектов (niebloid) |
|
(C++17) | уничтожает определённое количество объектов в диапазоне (шаблон функции) |
|
(C++20) | уничтожает определённое количество объектов в диапазоне (niebloid) |
|
(C++17) | уничтожает объект по заданному адресу (шаблон функции) |
|
(C++20) | уничтожает объект по заданному адресу (niebloid) |
|
(C++20) | создаёт объект по заданному адресу (шаблон функции) |
|
(C++20) | создаёт объект по заданному адресу (niebloid) |
Библиотека C
Определено в заголовке <cstdlib> |
|
|---|---|
| сортирует диапазон элементов произвольного типа (функция) |
|
| ищет элемент в массиве произвольного типа (функция) |
|
См. также
| Документация C для алгоритмов |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm