Extensions for ranges
From cppreference.net
<
cpp
|
experimental
Расширения 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
|
|
|
определяет, является ли последовательность перестановкой другой последовательности
(шаблон функции) |
|
|
генерирует следующую большую лексикографическую перестановку диапазона элементов
(шаблон функции) |
|
|
генерирует следующую меньшую лексикографическую перестановку диапазона элементов
(шаблон функции) |
|