Namespaces
Variants

Extensions for ranges

From cppreference.net

Расширения C++ для диапазонов, ISO/IEC TS 21425:2017, определяют одно изменение в базовом языке и задают новые компоненты для стандартной библиотеки C++, перечисленные на этой странице.

Техническая спецификация Ranges основана на стандарте C++14 с изменениями, внесенными Технической спецификацией Concepts .

Содержание

Изменения в базовом языке

Ranges TS изменяет спецификацию range-based for loop для разрешения использования итераторов начала и конца разных типов. Это изменение позволяет использовать sentinels и также присутствует в C++17.

Концепции

Основные концепции языка
Определено в заголовочном файле <experimental/ranges/concepts>
Определено в пространстве имён std::experimental::ranges
определяет, что тип идентичен другому типу
(концепт)
определяет, что тип является производным от другого типа
(концепт)
определяет, что тип может быть неявно преобразован в другой тип
(концепт)
указывает, что два типа имеют общий ссылочный тип
(концепт)
определяет, что два типа имеют общий тип
(концепт)
определяет, что тип является целочисленным типом
(концепт)
определяет, что тип является целочисленным типом со знаком
(концепт)
определяет, что тип является целочисленным типом без знака
(концепт)
определяет, что тип может быть присвоен из другого типа
(концепт)
определяет, что тип может быть обменян или что два типа могут быть обменены друг с другом
(концепт)
Концепции сравнения
Определено в заголовочном файле <experimental/ranges/concepts>
Определено в пространстве имён std::experimental::ranges
определяет, что тип может использоваться в булевых контекстах
(концепт)
определяет, что два типа можно сравнивать на равенство с использованием операторов == и ! =
(концепт)
определяет, что оператор == является отношением эквивалентности
(концепт)
определяет, что операторы сравнения для типа дают полный порядок
(концепт)
Концепции объектов
Определено в заголовочном файле <experimental/ranges/concepts>
Определено в пространстве имён std::experimental::ranges
определяет, что объект данного типа может быть уничтожен
(концепт)
определяет, что переменная данного типа может быть сконструирована или связана с набором типов аргументов
(концепт)
определяет, что объект типа может быть сконструирован по умолчанию
(концепт)
определяет, что объект типа может быть перемещённо сконструирован
(концепт)
определяет, что объект типа может быть скопирован и перемещен
(концепт)
определяет, что объект типа может быть перемещён и обменян
(концепт)
определяет, что объект типа может быть скопирован, перемещён и обменян
(концепт)
определяет, что объект типа может быть скопирован, перемещён, обменян и создан по умолчанию
(концепт)
указывает, что тип является регулярным, то есть одновременно Semiregular и EqualityComparable
(концепт)
Концепции вызываемых объектов
Определено в заголовочном файле <experimental/ranges/concepts>
Определено в пространстве имён std::experimental::ranges
определяет, что вызываемый тип может быть вызван с заданным набором типов аргументов
(концепт)
определяет, что вызываемый тип является булевым предикатом
(концепт)
определяет, что вызываемый тип является бинарным отношением
(концепт)
определяет, что Relation задает строгое слабое упорядочение
(концепт)
Концепция генератора случайных чисел
Определено в заголовочном файле <experimental/ranges/random>
Определено в пространстве имён std::experimental::ranges
определяет, что тип соответствует требованиям генератора равномерно распределенных случайных чисел
(концепт)

Общие утилиты

Утилитарные компоненты
Определено в заголовочном файле <experimental/ranges/utility>
Определено в пространстве имён std::experimental::ranges
обменивает значения двух объектов
(объект точки настройки)
заменяет аргумент новым значением и возвращает его предыдущее значение
(шаблон функции)
Функциональные объекты
Определено в заголовочном файле <experimental/ranges/functional>
Определено в пространстве имён std::experimental::ranges
вызывает Callable объект с заданными аргументами
(шаблон функции)
функциональный объект, реализующий x == y
(шаблон класса)
функциональный объект, реализующий x ! = y
(шаблон класса)
функциональный объект, реализующий x > y
(шаблон класса)
функциональный объект, реализующий x < y
(шаблон класса)
функциональный объект, реализующий x >= y
(шаблон класса)
функциональный объект, реализующий x <= y
(шаблон класса)
функциональный объект, возвращающий свой аргумент без изменений
(класс)
Метапрограммирование и характеристики типов
Определено в заголовочном файле <experimental/ranges/type_traits>
Определено в пространстве имён std::experimental::ranges
проверяет, можно ли обменивать объекты одного типа с объектами того же или другого типа
(шаблон класса)
определить общий ссылочный тип набора типов
(шаблон класса)
определить общий тип набора типов
(шаблон класса)
Помеченные пары и кортежи
Определено в заголовочном файле <experimental/ranges/utility>
Определено в пространстве имён std::experimental::ranges
указывает, что тип является спецификатором тега
(концепт)
определяет, что тип представляет спецификатор тега и его тип элемента
(концепт)
дополняет кортежеподобный тип именованными методами доступа
(шаблон класса)
псевдоним шаблона для помеченного std::pair
(псевдоним шаблона)
удобная функция для создания tagged_pair
(шаблон функции)
Определено в заголовочном файле <experimental/ranges/tuple>
псевдоним шаблона для помеченного std::tuple
(псевдоним шаблона)
удобная функция для создания tagged_tuple
(шаблон функции)
Определено в заголовочном файле <experimental/ranges/algorithm>
Определено в пространстве имён std::experimental::ranges::tag
спецификаторы тегов для использования с ranges::tagged
(класс)

Итераторы

Определено в заголовочном файле <experimental/ranges/iterator>
Концепции, связанные с итераторами
Определено в пространстве имён std::experimental::ranges
Концепции итераторов
определяет, что тип является читаемым посредством применения оператора *
(концепт)
определяет, что значение может быть записано в объект, на который ссылается итератор
(концепт)
определяет, что Semiregular тип может быть инкрементирован с помощью пре- и постинкрементных операторов
(концепт)
определяет, что операция инкремента для типа WeaklyIncrementable сохраняет равенство и что тип является EqualityComparable
(концепт)
определяет, что объекты типа могут быть инкрементированы и разыменованы
(концепт)
определяет, что объекты данного типа являются sentinel для Iterator типа
(концепт)
определяет, что к итератору и стражу можно применить оператор - для вычисления их разницы за постоянное время
(концепт)
определяет, что тип является входным итератором, то есть его указываемые значения могут быть прочитаны и он может быть как пре-, так и постинкрементирован
(концепт)
определяет, что тип является выходным итератором для заданного типа значения, то есть значения этого типа могут быть записаны в него, и он может быть как пре-, так и постинкрементирован
(концепт)
определяет, что InputIterator является прямым итератором, поддерживающим сравнение на равенство и многопроходность
(концепт)
определяет, что ForwardIterator является двунаправленным итератором, поддерживающим перемещение назад
(концепт)
определяет, что BidirectionalIterator является итератором произвольного доступа, поддерживающим продвижение за константное время и индексацию
(концепт)
Концепции косвенно вызываемых объектов
определяет, что вызываемый тип может быть вызван с результатом разыменования Readable типа
(концепт)
определяет, что вызываемый объект при вызове с результатом разыменования Readable типа удовлетворяет требованиям Predicate
(концепт)
определяет, что вызываемый объект при вызове с результатом разыменования некоторых Readable типов удовлетворяет Relation
(концепт)
определяет, что вызываемый объект при вызове с результатом разыменования некоторых Readable типов удовлетворяет StrictWeakOrder
(концепт)
Общие требования к алгоритмам
определяет, что значения могут быть перемещены из Readable типа в Writable тип
(концепт)
определяет, что значения могут быть перемещены из Readable типа в Writable тип, и что перемещение может быть выполнено через промежуточный объект
(концепт)
определяет, что значения могут быть скопированы из Readable типа в Writable тип
(концепт)
определяет, что значения могут быть скопированы из Readable типа в Writable тип, и что копирование может быть выполнено через промежуточный объект
(концепт)
определяет, что значения, ссылаемые двумя Readable типами, могут быть обменены
(концепт)
определяет, что значения, ссылаемые двумя Readable типами, могут быть сравнены
(концепт)
определяет общие требования алгоритмов, переупорядочивающих элементы на месте
(концепт)
определяет требования алгоритмов, которые объединяют отсортированные последовательности в выходную последовательность путем копирования элементов
(концепт)
определяет общие требования для алгоритмов, которые переупорядочивают последовательности в упорядоченные последовательности
(концепт)
Утилиты концепций
вычисляет результат вызова вызываемого объекта на результате разыменования некоторого набора Readable типов
(шаблон класса)
вспомогательный шаблон для указания ограничений на алгоритмы, принимающие проекции
(шаблон класса)
Примитивы итераторов
Утилиты итераторов
Определено в пространстве имён std::experimental::ranges
преобразует результат разыменования объекта в связанный тип rvalue-ссылки
(объект точки кастомизации)
обмен значениями, на которые ссылаются два разыменовываемых объекта
(объект точки кастомизации)
Характеристики итераторов
Определено в пространстве имён std::experimental::ranges
получает тип разности для WeaklyIncrementable типа
(шаблон класса)
получает тип значения для Readable типа
(шаблон класса)
получает категорию итератора для типа входного итератора
(шаблон класса)
класс совместимых характеристик, который собирает связанные типы итератора
(псевдоним шаблона)
получает связанные типы ссылок разыменовываемого объекта
(псевдоним шаблона)
Теги категорий итераторов
Определено в пространстве имён std::experimental::ranges
пустые типы классов, используемые для указания категорий итераторов
(класс)
std::iterator_traits специализации
Определено в пространстве имён std
специализирует std::iterator_traits для итераторов ranges TS
(специализация шаблона класса)
Операции с итераторами
Определено в пространстве имён std::experimental::ranges
перемещает итератор на заданное расстояние
(шаблон функции)
возвращает расстояние между итератором и стражем, или между началом и концом диапазона
(шаблон функции)
увеличивает итератор
(шаблон функции)
уменьшает итератор
(шаблон функции)
Адаптеры итераторов
Определено в пространстве имён std::experimental::ranges
адаптер итератора для обхода в обратном порядке
(шаблон класса)
адаптер итератора для вставки в конец контейнера
(шаблон класса)
адаптер итератора для вставки в начало контейнера
(шаблон класса)
адаптер итератора для вставки в контейнер
(шаблон класса)
адаптер итератора, разыменовывающийся в rvalue-ссылку
(шаблон класса)
адаптер sentinel для использования с move_iterator
(шаблон класса)
адаптирует пару итератор-страж в общий тип итератора для использования с унаследованными алгоритмами
(шаблон класса)
адаптер итератора, отслеживающий расстояние от своей начальной позиции
(шаблон класса)
пустой тип sentinel для использования с типами итераторов, которые знают границу своего диапазона
(класс)
обёртка для возможно висячего итератора
(шаблон класса)
шаблон псевдонима, который оборачивает тип итератора rvalue диапазона с помощью dangling
(шаблон псевдонима)
тип sentinel, используемый с любым итератором для обозначения бесконечного диапазона
(класс)
Итераторы потоков
Определено в пространстве имён std::experimental::ranges
итератор ввода, который читает из std::basic_istream
(шаблон класса)
выходной итератор, который записывает в std::basic_ostream
(шаблон класса)
input iterator, который читает из std::basic_streambuf
(шаблон класса)
выходной итератор, который записывает в std::basic_streambuf
(шаблон класса)

Диапазоны

Определено в заголовочном файле <experimental/ranges/range>
Концепты диапазонов
определяет, что тип является диапазоном, то есть предоставляет begin итератор и end страж
(концепт)
определяет, что диапазон знает свой размер за константное время
(концепт)
определяет, что диапазон является представлением, то есть имеет константное время копирования/перемещения/присваивания
(концепт)
определяет, что диапазон имеет идентичные типы итератора и стража
(концепт)
определяет диапазон, тип итератора которого удовлетворяет InputIterator
(концепт)
определяет диапазон, тип итератора которого удовлетворяет OutputIterator
(концепт)
определяет диапазон, тип итератора которого удовлетворяет ForwardIterator
(концепт)
определяет диапазон, тип итератора которого удовлетворяет BidirectionalIterator
(концепт)
определяет диапазон, тип итератора которого удовлетворяет RandomAccessIterator
(концепт)
Доступ к диапазонам
Определено в пространстве имен std::experimental::ranges
возвращает итератор на начало диапазона
(объект точки настройки)
возвращает итератор на конец диапазона
(объект точки настройки)
возвращает обратный итератор на диапазон
(объект точки настройки)
возвращает обратный конечный итератор на диапазон
(объект точки настройки)
Примитивы диапазонов
Определено в пространстве имен std::experimental::ranges
получает размер диапазона, который может быть вычислен за константное время
(объект точки настройки)
проверяет, является ли диапазон пустым
(объект точки настройки)
получает указатель на начало непрерывного диапазона
(объект точки настройки)
получает типы итератора и стража диапазона
(псевдоним шаблона)

Алгоритмы

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