Ограниченные алгоритмы (с C++20)
C++20 предоставляет ограниченные версии большинства алгоритмов в пространстве имён std::ranges. В этих алгоритмах диапазон может быть задан как пара итератор-конец или как единственный аргумент в виде range, и поддерживаются проекции и вызываемые указатели на члены. Кроме того, типы возвращаемых значений большинства алгоритмов были изменены, чтобы возвращать всю потенциально полезную информацию, вычисленную во время выполнения алгоритма.
Ограниченные алгоритмы
Определено в заголовке <algorithm> |
|
|---|---|
Определено в пространстве имён std::ranges |
|
Операции над последовательностями без изменения |
|
|
(C++20)(C++20)(C++20) | проверяет, является ли предикат true для всех, некоторых или ни одного из элементов в диапазоне(niebloid) |
|
(C++20) | применяет функцию к диапазону элементов (niebloid) |
|
(C++20) | применяет объект-функцию к первым N элементам последовательности (niebloid) |
|
(C++20)(C++20) | возвращает количество элементов, удовлетворяющих определённым условиям (niebloid) |
|
(C++20) | находит первую позицию, где два диапазона различаются (niebloid) |
|
(C++20) | определяет, являются ли два набора элементов одинаковыми (niebloid) |
|
(C++20) | возвращает значение true, если один диапазон лексикографически меньше другого(niebloid) |
|
(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) | ищет диапазон элементов (niebloid) |
|
(C++20) | ищет заданное количество последовательных копий элемента в диапазоне (niebloid) |
|
(C++23)(C++23) | проверяет, содержит ли диапазон заданный элемент или поддиапазон (niebloid) |
|
(C++23) | проверяет, начинается ли диапазон с другого диапазона (niebloid) |
|
(C++23) | проверяет, заканчивается ли диапазон другим диапазоном (niebloid) |
Операции над последовательностями с изменением |
|
|
(C++20)(C++20) | копирует диапазон элементов в новое местоположение (niebloid) |
|
(C++20) | копирует определённое количество элементов в новое местоположение (niebloid) |
|
(C++20) | копирует диапазон элементов в обратном порядке (niebloid) |
|
(C++20) | перемещает диапазон элементов в новое местоположение (niebloid) |
|
(C++20) | перемещает диапазон элементов в новое местоположение в обратном порядке (niebloid) |
|
(C++20) | присваивает диапазону элементов определённое значение (niebloid) |
|
(C++20) | присваивает значение определённому количеству элементов (niebloid) |
|
(C++20) | применяет функцию к диапазону элементов (niebloid) |
|
(C++20) | сохраняет результат функции в диапазоне (niebloid) |
|
(C++20) | сохраняет результат N применений функции (niebloid) |
|
(C++20)(C++20) | удаляет элементы, удовлетворяющие определённым критериям (niebloid) |
|
(C++20)(C++20) | копирует диапазон элементов, опуская те, которые удовлетворяют определённым критериям (niebloid) |
|
(C++20)(C++20) | заменяет все значения, удовлетворяющие определённым критериям, на другое значение (niebloid) |
|
(C++20)(C++20) | копирует диапазон, заменяя элементы, удовлетворяющие определённым критериям, на другое значение (niebloid) |
|
(C++20) | меняет местами два диапазона элементов (niebloid) |
|
(C++20) | изменяет порядок элементов в диапазоне на обратный (niebloid) |
|
(C++20) | создаёт копию диапазона с обратным порядком элементов (niebloid) |
|
(C++20) | вращает порядок элементов в диапазоне (niebloid) |
|
(C++20) | копирует и вращает диапазон элементов (niebloid) |
|
(C++20) | случайным образом изменяет порядок элементов в диапазоне (niebloid) |
|
(C++23) | сдвигает элементы в диапазоне (niebloid) |
|
(C++20) | выбирает N случайных элементов из последовательности (niebloid) |
|
(C++20) | удаляет последовательные дублирующиеся элементы в диапазоне (niebloid) |
|
(C++20) | создаёт копию диапазона, исключая последовательные дублирующиеся элементы (niebloid) |
Операции разбиения |
|
|
(C++20) | определяет, является ли диапазон разнесённым заданным предикатом (niebloid) |
|
(C++20) | разделяет диапазон элементов на две группы (niebloid) |
|
(C++20) | копирует диапазон, разделяя элементы на две группы (niebloid) |
|
(C++20) | разделяет элементы на две группы, сохраняя их относительный порядок (niebloid) |
|
(C++20) | находит точку разбиения разнесённого диапазона (niebloid) |
Операции сортировки |
|
|
(C++20) | проверяет, отсортирован ли диапазон в порядке возрастания (niebloid) |
|
(C++20) | находит наибольший отсортированный поддиапазон (niebloid) |
|
(C++20) | сортирует диапазон в порядке возрастания (niebloid) |
|
(C++20) | сортирует первые N элементов диапазона (niebloid) |
|
(C++20) | копирует и частично сортирует диапазон элементов (niebloid) |
|
(C++20) | сортирует диапазон элементов, сохраняя порядок между равными элементами (niebloid) |
|
(C++20) | частично сортирует данный диапазон, гарантируя, что он разнесён заданным элементом (niebloid) |
Операции бинарного поиска (для отсортированных диапазонов) |
|
|
(C++20) | возвращает итератор на первый элемент, не меньший заданного значения (niebloid) |
|
(C++20) | возвращает итератор на первый элемент, больший определённого значения (niebloid) |
|
(C++20) | определяет, существует ли элемент в частично упорядоченном диапазоне (niebloid) |
|
(C++20) | возвращает диапазон элементов, соответствующих определенному ключу (niebloid) |
Операции над множествами (с отсортированными диапазонами) |
|
|
(C++20) | объединяет два отсортированных диапазона (niebloid) |
|
(C++20) | объединяет два упорядоченных диапазона на месте (niebloid) |
|
(C++20) | возвращает true , если одна последовательность является подпоследовательностью другой(niebloid) |
|
(C++20) | вычисляет разность двух множеств (niebloid) |
|
(C++20) | вычисляет пересечение двух множеств (niebloid) |
|
(C++20) | вычисляет симметрическую разность двух множеств (niebloid) |
|
(C++20) | вычисляет объединение двух множеств (niebloid) |
Операции с кучей |
|
|
(C++20) | проверяет, является ли данный диапазон максимальной кучей (niebloid) |
|
(C++20) | находит наибольший поддиапазон, являющийся максимальной кучей (niebloid) |
|
(C++20) | создаёт максимальную кучу из диапазона элементов (niebloid) |
|
(C++20) | добавляет элемент в максимальную кучу (niebloid) |
|
(C++20) | удаляет наибольший элемент из максимальной кучи (niebloid) |
|
(C++20) | преобразует максимальную кучу в диапазон элементов, отсортированных по возрастанию (niebloid) |
Операции с минимумом/максимумом |
|
|
(C++20) | возвращает большее из заданных значений (niebloid) |
|
(C++20) | возвращает наибольший элемент в диапазоне (niebloid) |
|
(C++20) | возвращает меньшее из заданных значений (niebloid) |
|
(C++20) | возвращает наименьший элемент в диапазоне (niebloid) |
|
(C++20) | возвращает меньшее и большее из двух элементов (niebloid) |
|
(C++20) | возвращает наименьший и наибольший элементы в диапазоне (niebloid) |
|
(C++20) | ограничение значения между парой граничных значений (niebloid) |
Операции с перестановками |
|
|
(C++20) | определяет, является ли последовательность перестановкой другой последовательности (niebloid) |
|
(C++20) | генерирует следующую большую лексикографическую перестановку диапазона элементов (niebloid) |
|
(C++20) | генерирует предыдущую меньшую лексикографическую перестановку диапазона элементов (niebloid) |
Ограниченные числовые операции
Определено в заголовке <numeric> |
|
|---|---|
Определено в пространстве имён std::ranges |
|
|
(C++23) | заполняет диапазон последовательными приращениями начального значения (niebloid) |
Ограниченные операции слияния
Определено в заголовке <algorithm> |
|
|---|---|
Определено в пространстве имён std::ranges |
|
|
(C++23) | слева-складывает диапазон элементов (niebloid) |
|
(C++23) | слева-складывает диапазон элементов, используя первый элемент в качестве начального значения (niebloid) |
|
(C++23) | справа-складывает диапазон элементов (niebloid) |
|
(C++23) | справа-складывает диапазон элементов, используя последний элемент в качестве начального значения (niebloid) |
|
(C++23) | слева-складывает диапазон элементов и возвращает пару (итератор, значение) (niebloid) |
|
(C++23) | слева-складывает диапазон элементов, используя первый элемент в качестве начального значения, и возвращает пару (итератор, optional) (niebloid) |
Алгоритмы для ограниченной неинициализированной памяти
Определено в заголовке <memory> |
|
|---|---|
Определено в пространстве имён std::ranges |
|
|
(C++20) | копирует диапазон объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | копирует определённое количество объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | копирует объект в неинициализированную область памяти, определённую диапазоном (niebloid) |
|
(C++20) | копирует объект в неинициализированную область памяти, определённую началом и количеством (niebloid) |
|
(C++20) | перемещает диапазон объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | перемещает определённое количество объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | создаёт объекты по умолчанию в неинициализированной области памяти, определённой диапазоном (niebloid) |
|
(C++20) | создаёт объекты по умолчанию в неинициализированной области памяти, определённой началом и количеством (niebloid) |
|
(C++20) | создаёт объекты по значению в неинициализированной области памяти, определённой диапазоном (niebloid) |
|
(C++20) | создаёт объекты по значению в неинициализированной области памяти, определённой началом и количеством (niebloid) |
|
(C++20) | удаляет диапазон объектов (niebloid) |
|
(C++20) | удаляет определённое количество объектов в диапазоне (niebloid) |
|
(C++20) | удаляет объект по указанному адресу (niebloid) |
|
(C++20) | создаёт объект по указанному адресу (niebloid) |
Типы возвращаемых значений
Определено в заголовке <algorithm> |
|
|---|---|
Определено в пространстве имён std::ranges |
|
|
(C++20) | предоставляет способ хранения итератора и объекта функции как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения двух итераторов как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения двух итераторов как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения трёх итераторов как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения трёх итераторов как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения двух объектов или ссылок одного типа как единого целого (шаблон класса) |
|
(C++20) | предоставляет способ хранения итератора и флага булевого типа как единого целого (шаблон класса) |
|
(C++23) | предоставляет способ хранения итератора и значения как единого целого (шаблон класса) |
|
(C++23) | предоставляет способ хранения итератора и значения как единого целого (шаблон класса) |
Примечания
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_ranges | 201911L | (C++20) | Библиотека диапазонов и ограниченные алгоритмы |
__cpp_lib_ranges_contains | 202207L | (C++23) |
std::ranges::contains |
__cpp_lib_ranges_find_last | 202207L | (C++23) |
std::ranges::find_last |
__cpp_lib_ranges_fold | 202207L | (C++23) |
std::ranges алгоритмы fold |
__cpp_lib_ranges_iota | 202202L | (C++23) |
std::ranges::iota |
__cpp_lib_ranges_starts_ends_with | 202106L | (C++23) |
std::ranges::starts_with, std::ranges::ends_with |
__cpp_lib_shift | 201806L | (C++20) |
std::shift_left и std::shift_right |
| 202202L | (C++23) |
std::ranges::shift_left и std::ranges::shift_right |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/algorithm/ranges