Namespaces
Variants

Ограниченные алгоритмы(начиная с C++20)

С сайта ru.cppreference.net
 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами (C++20)
Ограниченные алгоритмы, например ranges::copy, ranges::sort, ...
Немодифицирующие операции над последовательностями    
Пакетные операции
(C++17)
Операции поиска
Модифицирующие операции над последовательностями
Операции копирования
(C++11)
(C++11)
Операции обмена
Операции преобразования
Операции генерации
Операции удаления
Операции изменения порядка
(до C++17)(C++11)
(C++20)(C++20)
Операции выборки
(C++17)

Сортировка и связанные операции
Операции разбиения
(C++11)    

Операции сортировки
Операции бинарного поиска
(по разбитым диапазонам)
Операции над множествами (на отсортированных диапазонах)
Операции слияния (на отсортированных диапазонах)
Операции с кучей
Операции минимума/максимума
(C++11)
(C++17)
Операции лексикографического сравнения
Операции перестановок


Политики выполнения (C++17)
(только демонстрация*)(C++26)

Числовые операции
(C++11)
(C++17)
(C++17)    

Специализированные<memory> алгоритмы

Специализированные<random> алгоритмы
Библиотека C









 
Ограниченные алгоритмы
Все имена в этом меню принадлежат пространству имёнstd::ranges
Немодифицирующие операции над последовательностями
Модифицирующие операции над последовательностями
Операции разбиения
Операции сортировки
Операции бинарного поиска (на отсортированных диапазонах)
       
       
Операции над множествами (на отсортированных диапазонах)
Операции с кучей
Операции минимума/максимума
       
       
Операции перестановок
Операции свёртки
Операции над неинициализированной памятью
Типы возврата
 

C++20 предоставляет ограниченные версии большинства алгоритмов в пространстве имён std::ranges. В этих алгоритмах диапазон может быть задан либо как пара итератор-страж, либо как единственный аргумент диапазон, и поддерживаются проекции и вызываемые объекты-указатели на член. Кроме того, типы возврата большинства алгоритмов были изменены, чтобы возвращать всю потенциально полезную информацию, вычисленную во время выполнения алгоритма.

Объекты функций алгоритмов

Алгоритмический функциональный объект (AFO), неформально известный как niebloid , представляет собой объект точки настройки (CPO), который задан как одна или несколько перегруженных шаблонов функций. Имя этих шаблонов функций обозначает соответствующий алгоритмический функциональный объект.

Для алгоритмического функционального объекта o пусть S будет соответствующим набором шаблонов функций. Тогда для любой последовательности аргументов args... o(args...) является выражение-эквивалентным s(args...), где результатом поиска имени для s является набор перегрузок S.

Ограниченные алгоритмы в пространстве имён std::ranges определены как алгоритмические функциональные объекты. В результате:

Параметры диапазонов

Некоторые перегрузки принимают аргументы-диапазоны, они ведут себя так, как если бы были реализованы путём передачи соответствующей перегрузке в пространстве имён ranges, которая принимает отдельные аргументы итератора и ограничителя, где для каждого аргумента-диапазона r:

  • Соответствующий аргумент итератора инициализируется с помощью ranges::begin(r).
  • Соответствующий аргумент ограничителя инициализируется с помощью ranges::end(r).
(до C++26)
  • Соответствующий аргумент ограничителя инициализируется с помощью:
  • ranges::next(ranges::begin(r), ranges::end(r)), если тип r моделирует forward_range и вычисление ranges::next удовлетворяет указанным требованиям к сложности.
  • ranges::end(r) в противном случае.
(начиная с C++26)

Немодифицирующие операции с последовательностями

Определено в заголовочном файле <algorithm>
Определено в пространстве имен std::ranges
Пакетные операции
применяет унарный функциональный объект к элементам из диапазона
(алгоритмический функциональный объект)
применяет функциональный объект к первым N элементам последовательности
(алгоритмический функциональный объект)
Операции поиска
проверяет, выполняется ли предикат true для всех, любого или ни одного из элементов диапазона
(объект-функция алгоритма)
проверяет, содержит ли диапазон данный элемент или поддиапазон
(объект-функция алгоритма)
находит первый элемент, удовлетворяющий определённым критериям
(объект-функция алгоритма)
находит последний элемент, удовлетворяющий определённым критериям
(объект-функция алгоритма)
находит последнюю последовательность элементов в определённом диапазоне
(объект-функция алгоритма)
ищет любой из набора элементов
(объект-функция алгоритма)
находит первые два соседних элемента, которые равны (или удовлетворяют заданному предикату)
(объект-функция алгоритма)
возвращает количество элементов, удовлетворяющих определённым критериям
(объект-функция алгоритма)
находит первую позицию, где два диапазона различаются
(объект-функция алгоритма)
определяет, одинаковы ли два набора элементов
(объект-функция алгоритма)
ищет первое вхождение диапазона элементов
(объект-функция алгоритма)
ищет первое вхождение указанного количества последовательных копий элемента в диапазоне
(объект-функция алгоритма)
проверяет, начинается ли диапазон с другого диапазона
(объект-функция алгоритма)
проверяет, заканчивается ли диапазон другим диапазоном
(объект-функция алгоритма)
Операции свёртки
выполняет левую свёртку диапазона элементов
(алгоритмический объект функции)
выполняет левую свёртку диапазона элементов, используя первый элемент в качестве начального значения
(алгоритмический объект функции)
выполняет правую свёртку диапазона элементов
(алгоритмический объект функции)
выполняет правую свёртку диапазона элементов, используя последний элемент в качестве начального значения
(алгоритмический объект функции)
выполняет левую свёртку диапазона элементов и возвращает pair (итератор, значение)
(алгоритмический объект функции)
выполняет левую свёртку диапазона элементов, используя первый элемент в качестве начального значения, и возвращает pair (итератор, optional)
(алгоритмический объект функции)

Изменяющие операции последовательности

Определено в заголовочном файле <algorithm>
Определено в пространстве имён std::ranges
Операции копирования
копирует диапазон элементов в новое место
(объект функции алгоритма)
копирует некоторое количество элементов в новое место
(объект функции алгоритма)
копирует диапазон элементов в обратном порядке
(объект функции алгоритма)
перемещает диапазон элементов в новое место
(объект функции алгоритма)
перемещает диапазон элементов в новое место в обратном порядке
(объект функции алгоритма)
Операции обмена
меняет местами два диапазона элементов
(объект функции алгоритма)
Операции преобразования
применяет функцию к диапазону элементов
(алгоритмический объект-функция)
заменяет все значения, удовлетворяющие определённым критериям, другим значением
(алгоритмический объект-функция)
копирует диапазон, заменяя элементы, удовлетворяющие определённым критериям, другим значением
(алгоритмический объект-функция)
Операции генерации
присваивает диапазону элементов определённое значение
(алгоритмический функциональный объект)
присваивает значение заданному количеству элементов
(алгоритмический функциональный объект)
сохраняет результат функции в диапазоне
(алгоритмический функциональный объект)
сохраняет результат N применений функции
(алгоритмический функциональный объект)
Операции удаления
удаляет элементы, удовлетворяющие определённым критериям
(объект функции алгоритма)
копирует диапазон элементов, пропуская те, которые удовлетворяют определённым критериям
(объект функции алгоритма)
удаляет последовательные повторяющиеся элементы в диапазоне
(объект функции алгоритма)
создаёт копию некоторого диапазона элементов, не содержащую последовательных дубликатов
(объект функции алгоритма)
Операции изменения порядка
изменяет порядок элементов в диапазоне на обратный
(функциональный объект алгоритма)
создаёт копию диапазона с обратным порядком элементов
(функциональный объект алгоритма)
выполняет циклический сдвиг элементов в диапазоне
(функциональный объект алгоритма)
копирует и циклически сдвигает элементы диапазона
(функциональный объект алгоритма)
сдвигает элементы в диапазоне
(функциональный объект алгоритма)
случайным образом переупорядочивает элементы в диапазоне
(функциональный объект алгоритма)
Операции выборки
выбирает N случайных элементов из последовательности
(объект-функция алгоритма)

Сортировка и связанные операции

Определено в заголовке <algorithm>
Определено в пространстве имён std::ranges
Операции разделения
определяет, разделён ли диапазон заданным предикатом
(объект-функция алгоритма)
разделяет диапазон элементов на две группы
(объект-функция алгоритма)
копирует диапазон, разделяя элементы на две группы
(объект-функция алгоритма)
разделяет элементы на две группы, сохраняя их относительный порядок внутри каждой группы
(объект-функция алгоритма)
находит точку разбиения разделённого диапазона
(объект-функция алгоритма)
Операции сортировки
проверяет, отсортирован ли диапазон
(объект функции алгоритма)
находит наибольший отсортированный поддиапазон
(объект функции алгоритма)
сортирует диапазон элементов
(объект функции алгоритма)
сортирует первые N элементов диапазона
(объект функции алгоритма)
копирует и частично сортирует диапазон элементов
(объект функции алгоритма)
сортирует диапазон элементов, сохраняя относительный порядок эквивалентных элементов
(объект функции алгоритма)
находит N-й элемент, если бы диапазон был отсортирован
(объект функции алгоритма)
Операции двоичного поиска (по отсортированным диапазонам)
находит первый элемент, не меньший заданного значения, используя двоичный поиск
(объект функции алгоритма)
находит первый элемент, больший заданного значения, используя двоичный поиск
(объект функции алгоритма)
определяет, существует ли элемент в диапазоне, используя двоичный поиск
(объект функции алгоритма)
находит диапазон элементов, соответствующих заданному значению, используя двоичный поиск
(объект функции алгоритма)
Операции над множествами (на отсортированных диапазонах)
определяет, является ли одна последовательность подпоследовательностью другой
(функциональный объект алгоритма)
вычисляет разность двух множеств
(функциональный объект алгоритма)
вычисляет пересечение двух множеств
(функциональный объект алгоритма)
вычисляет симметрическую разность двух множеств
(функциональный объект алгоритма)
вычисляет объединение двух множеств
(функциональный объект алгоритма)
Операции слияния (для отсортированных диапазонов)
сливает два отсортированных диапазона
(объект функции алгоритма)
сливает два упорядоченных диапазона на месте
(объект функции алгоритма)
Операции с кучей
проверяет, является ли заданный диапазон максимальной кучей
(объект алгоритмической функции)
находит наибольший поддиапазон, являющийся максимальной кучей
(объект алгоритмической функции)
создаёт максимальную кучу из диапазона элементов
(объект алгоритмической функции)
добавляет элемент в максимальную кучу
(объект алгоритмической функции)
удаляет наибольший элемент из максимальной кучи
(объект алгоритмической функции)
преобразует максимальную кучу в отсортированный диапазон элементов
(объект алгоритмической функции)
Операции минимума/максимума
возвращает наибольшее из заданных значений
(функциональный объект алгоритма)
возвращает наибольший элемент в диапазоне
(функциональный объект алгоритма)
возвращает наименьшее из заданных значений
(функциональный объект алгоритма)
возвращает наименьший элемент в диапазоне
(функциональный объект алгоритма)
возвращает меньший и больший из двух элементов
(функциональный объект алгоритма)
возвращает наименьший и наибольший элементы в диапазоне
(функциональный объект алгоритма)
ограничивает значение между парой граничных значений
(функциональный объект алгоритма)
Операции лексикографического сравнения
сравнивает два диапазона лексикографически
(функциональный объект алгоритма)
Операции перестановки
определяет, является ли последовательность перестановкой другой последовательности
(функциональный объект алгоритма)
генерирует следующую большую лексикографическую перестановку диапазона элементов
(функциональный объект алгоритма)
генерирует следующую меньшую лексикографическую перестановку диапазона элементов
(функциональный объект алгоритма)

Числовые операции

Определено в заголовочном файле <numeric>
Определено в пространстве имён std::ranges
заполняет диапазон последовательными приращениями начального значения
(алгоритмический функциональный объект)

Специализированные <memory>алгоритмы

Определено в заголовке <memory>
Определено в пространстве имён std::ranges
Конструирование объектов (пакетное)
создаёт объект по заданному адресу
(объект функции алгоритма)
копирует диапазон объектов в неинициализированную область памяти
(объект функции алгоритма)
копирует заданное количество объектов в неинициализированную область памяти
(объект функции алгоритма)
копирует объект в неинициализированную область памяти, определяемую диапазоном
(объект функции алгоритма)
копирует объект в неинициализированную область памяти, определяемую началом и количеством
(объект функции алгоритма)
перемещает диапазон объектов в неинициализированную область памяти
(объект функции алгоритма)
перемещает заданное количество объектов в неинициализированную область памяти
(объект функции алгоритма)
конструирует объекты через инициализацию по умолчанию в неинициализированной области памяти, определяемой диапазоном
(объект функции алгоритма)
конструирует объекты через инициализацию по умолчанию в неинициализированной области памяти, определяемой началом и количеством
(объект функции алгоритма)
конструирует объекты через инициализацию значением в неинициализированной области памяти, определяемой диапазоном
(объект функции алгоритма)
конструирует объекты через инициализацию значением в неинициализированной области памяти, определяемой началом и количеством
(объект функции алгоритма)
Пакетное уничтожение объектов
уничтожает диапазон объектов
(объект функции алгоритма)
уничтожает несколько объектов в диапазоне
(объект функции алгоритма)
уничтожает объект по заданному адресу
(объект функции алгоритма)

Специализированные <random> алгоритмы

Определено в заголовочном файле <random>
Определено в пространстве имён std::ranges
заполняет диапазон случайными числами из равномерного генератора случайных битов
(функциональный объект алгоритма)

Типы возвращаемых значений

Определено в заголовочном файле <algorithm>
Определено в пространстве имен std::ranges
предоставляет способ хранить итератор и функциональный объект как единое целое
(шаблон класса)
предоставляет способ хранить два итератора как единое целое
(шаблон класса)
предоставляет способ хранить два итератора как единое целое
(шаблон класса)
предоставляет способ хранить три итератора как единое целое
(шаблон класса)
предоставляет способ хранить три итератора как единое целое
(шаблон класса)
предоставляет способ хранить два объекта или ссылки одного типа как единое целое
(шаблон класса)
предоставляет способ хранить итератор и логический флаг как единое целое
(шаблон класса)
предоставляет способ хранить итератор и значение как единое целое
(шаблон класса)
предоставляет способ хранить итератор и значение как единое целое
(шаблон класса)

Примечания

Макрос тестирования возможности Значение Стандарт Возможность
__cpp_lib_algorithm_default_value_type 202403L (C++26) Списочная инициализация для алгоритмов
__cpp_lib_parallel_algorithm 202506L (C++26) Параллельные диапазонные алгоритмы
__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 алгоритмы свёртки
__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
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение, опубликованное как Корректное поведение
P3136R1 C++20 niebloids могли быть определены как
особые сущности, отличные от функциональных объектов
требовалось указывать
как функциональные объекты