Extensions for ranges
From cppreference.com
<
cpp
|
experimental
The C++ Extensions for Ranges, ISO/IEC TS 21425:2017, specifies one modification to the core language and defines new components for the C++ standard library listed on this page.
The Ranges TS is based on the C++14 standard as modified by the Concepts TS .
Core language changes
The Ranges TS modifies the specification of the range-based for loop to permit differently typed begin and end iterators. This change permits the use of sentinels and is also present in C++17.
Concepts
Core language concepts |
|
Defined in header
<experimental/ranges/concepts>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that a type is the same as another type
(concept) |
|
specifies that a type is derived from another type
(concept) |
|
specifies that a type is implicitly convertible to another type
(concept) |
|
specifies that two types share a common reference type
(concept) |
|
specifies that two types share a common type
(concept) |
|
specifies that a type is an integral type
(concept) |
|
specifies that a type is an integral type that is signed
(concept) |
|
specifies that a type is an integral type that is not signed
(concept) |
|
specifies that a type is assignable from another type
(concept) |
|
specifies that a type can be swapped or that two types can be swapped with each other
(concept) |
|
Comparison concepts |
|
Defined in header
<experimental/ranges/concepts>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that a type can be used in Boolean contexts
(concept) |
|
specifies that two types can be compared for equality using operators
==
and
!
=
(concept) |
|
specifies that operator
==
is an equivalence relation
(concept) |
|
specifies that the comparison operators on the type yield a total order
(concept) |
|
Object concepts |
|
Defined in header
<experimental/ranges/concepts>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that an object of the type can be destroyed
(concept) |
|
specifies that a variable of the type can be constructed from or bound to a set of argument types
(concept) |
|
specifies that an object of a type can be default constructed
(concept) |
|
specifies that an object of a type can be move constructed
(concept) |
|
specifies that an object of a type can be copy constructed and move constructed
(concept) |
|
specifies that an object of a type can be moved and swapped
(concept) |
|
specifies that an object of a type can be copied, moved, and swapped
(concept) |
|
specifies that an object of a type can be copied, moved, swapped, and default constructed
(concept) |
|
specifies that a type is regular, that is, it is both
Semiregular
and
EqualityComparable
(concept) |
|
Callable concepts |
|
Defined in header
<experimental/ranges/concepts>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that a callable type can be invoked with a given set of argument types
(concept) |
|
specifies that a callable type is a Boolean predicate
(concept) |
|
specifies that a callable type is a binary relation
(concept) |
|
specifies that a
Relation
imposes a strict weak ordering
(concept) |
|
Random number generator concept |
|
Defined in header
<experimental/ranges/random>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that a type qualifies as a uniform random number generator
(concept) |
General utilities
Utility components |
|
Defined in header
<experimental/ranges/utility>
|
|
Defined in namespace
std::experimental::ranges
|
|
swaps the value of two objects
(customization point object) |
|
replaces the argument with a new value and returns its previous value
(function template) |
|
Function objects |
|
Defined in header
<experimental/ranges/functional>
|
|
Defined in namespace
std::experimental::ranges
|
|
invokes a
Callable
object with the given arguments
(function template) |
|
function object implementing
x
==
y
(class template) |
|
function object implementing
x
!
=
y
(class template) |
|
function object implementing
x
>
y
(class template) |
|
function object implementing
x
<
y
(class template) |
|
function object implementing
x
>=
y
(class template) |
|
function object implementing
x
<=
y
(class template) |
|
function object that returns its argument unchanged
(class) |
|
Metaprogramming and type traits |
|
Defined in header
<experimental/ranges/type_traits>
|
|
Defined in namespace
std::experimental::ranges
|
|
checks if objects of a type can be swapped with objects of same or different type
(class template) |
|
determine the common reference type of a set of types
(class template) |
|
determine the common type of a set of types
(class template) |
|
Tagged pairs and tuples |
|
Defined in header
<experimental/ranges/utility>
|
|
Defined in namespace
std::experimental::ranges
|
|
specifies that a type is a tag specifier
(concept) |
|
specifies that a type represents a tag specifier and its element type
(concept) |
|
augument a tuple-like type with named accessors
(class template) |
|
alias template for a tagged
std::pair
(alias template) |
|
convenience function for creating a
tagged_pair
(function template) |
|
Defined in header
<experimental/ranges/tuple>
|
|
alias template for a tagged
std::tuple
(alias template) |
|
convenience function for creating a
tagged_tuple
(function template) |
|
Defined in header
<experimental/ranges/algorithm>
|
|
Defined in namespace
std::experimental::ranges::tag
|
|
tag specifiers for use with
ranges::tagged
(class) |
Iterators
Defined in header
<experimental/ranges/iterator>
|
|
|
|
Defined in namespace
std::experimental::ranges
|
|
Iterator concepts |
|
specifies that a type is readable by applying operator
*
(concept) |
|
specifies that a value can be written to an iterator's referenced object
(concept) |
|
specifies that a
Semiregular
type can be incremented with pre- and post-increment operators
(concept) |
|
specifies that the increment operation on a
WeaklyIncrementable
type is equality-preserving and that the type is
EqualityComparable
(concept) |
|
specifies that objects of a type can be incremented and dereferenced
(concept) |
|
specifies that objects of a type is a sentinel for an
Iterator
type
(concept) |
|
specifies that the
-
operator can be applied to an iterator and a sentinel to calculate their difference in constant time
(concept) |
|
specifies that a type is an input iterator, that is, its referenced values can be read and it can be both pre- and post-incremented
(concept) |
|
specifies that a type is an output iterator for a given value type, that is, values of that type can be written to it and it can be both pre- and post-incremented
(concept) |
|
specifies that an
InputIterator
is a forward iterator, supporting equality comparison and multi-pass
(concept) |
|
specifies that a
ForwardIterator
is a bidirectional iterator, supporting movement backwards
(concept) |
|
specifies that a
BidirectionalIterator
is a random-access iterator, supporting advancement in constant time and subscripting
(concept) |
|
Indirect callable concepts |
|
specifies that a callable type can be invoked with the result of dereferencing a
Readable
type
(concept) |
|
specifies that a callable object, when invoked with the result of dereferencing a
Readable
type, satisfies
Predicate
(concept) |
|
specifies that a callable object, when invoked with the result of dereferencing some
Readable
types, satisfies
Relation
(concept) |
|
specifies that a callable object, when invoked with the result of dereferencing some
Readable
types, satisfies
StrictWeakOrder
(concept) |
|
Common algorithm requirements |
|
specifies that values may be moved from a
Readable
type to a
Writable
type
(concept) |
|
specifies that values may be moved from a
Readable
type to a
Writable
type and that the move may be performed via an intermediate object
(concept) |
|
specifies that values may be copied from a
Readable
type to a
Writable
type
(concept) |
|
specifies that values may be copied from a
Readable
type to a
Writable
type and that the copy may be performed via an intermediate object
(concept) |
|
specifies that the values referenced by two
Readable
types can be swapped
(concept) |
|
specifies that the values referenced by two
Readable
types can be compared
(concept) |
|
specifies the common requirements of algorithms that reorder elements in place
(concept) |
|
specifies the requirements of algorithms that merge sorted sequences into an output sequence by copying elements
(concept) |
|
specifies the common requirements of algorithms that permute sequences into ordered sequences
(concept) |
|
Concept utilities |
|
compute the result of invoking a callable object on the result of dereferencing some set of
Readable
types
(class template) |
|
helper template for specifying the constraints on algorithms that accept projections
(class template) |
|
Iterator primitives |
|
Iterator utilities |
|
Defined in namespace
std::experimental::ranges
|
|
casts the result of dereferencing an object to its associated rvalue reference type
(customization point object) |
|
swap the values referenced by two dereferenceable objects
(customization point object) |
|
Iterator traits |
|
Defined in namespace
std::experimental::ranges
|
|
obtains the difference type of a
WeaklyIncrementable
type
(class template) |
|
obtains the value type of a
Readable
type
(class template) |
|
obtains the iterator category of an input iterator type
(class template) |
|
compatibility traits class that collects an iterator’s associated types
(alias template) |
|
obtains a dereferenceable object's associated reference types
(alias template) |
|
Iterator category tags |
|
Defined in namespace
std::experimental::ranges
|
|
empty class types used to indicate iterator categories
(class) |
|
std::iterator_traits specializations |
|
Defined in namespace
std
|
|
specializes
std::iterator_traits
for ranges TS iterators
(class template specialization) |
|
Iterator operations |
|
Defined in namespace
std::experimental::ranges
|
|
advances an iterator by given distance
(function template) |
|
returns the distance between an iterator and a sentinel, or between the beginning and the end of a range
(function template) |
|
increment an iterator
(function template) |
|
decrement an iterator
(function template) |
|
Iterator adaptors |
|
Defined in namespace
std::experimental::ranges
|
|
iterator adaptor for reverse-order traversal
(class template) |
|
iterator adaptor for insertion at the end of a container
(class template) |
|
iterator adaptor for insertion at the front of a container
(class template) |
|
iterator adaptor for insertion into a container
(class template) |
|
iterator adaptor which dereferences to an rvalue reference
(class template) |
|
sentinel adaptor for use with
move_iterator
(class template) |
|
adapt an iterator-sentinel pair into a common iterator type for use with legacy algorithms
(class template) |
|
iterator adaptor that keeps track of its distance from its starting position
(class template) |
|
empty sentinel type for use with iterator types that know the bound of their range
(class) |
|
wrapper for a possibly dangling iterator
(class template) |
|
alias template that wraps the iterator type of an rvalue range with
dangling
(alias template) |
|
sentinel type used with any iterator to denote an infinite range
(class) |
|
Stream iterators |
|
Defined in namespace
std::experimental::ranges
|
|
input iterator that reads from
std::basic_istream
(class template) |
|
output iterator that writes to
std::basic_ostream
(class template) |
|
input iterator that reads from
std::basic_streambuf
(class template) |
|
output iterator that writes to
std::basic_streambuf
(class template) |
Ranges
Defined in header
<experimental/ranges/range>
|
|
Range concepts |
|
specifies that a type is a range, that is, it provides a
begin
iterator and an
end
sentinel
(concept) |
|
specifies that a range knows its size in constant time
(concept) |
|
specifies that a range is a view, that is, it has constant time copy/move/assignment
(concept) |
|
specifies that a range has identical iterator and sentinel types
(concept) |
|
specifies a range whose iterator type satisfies
InputIterator
(concept) |
|
specifies a range whose iterator type satisfies
OutputIterator
(concept) |
|
specifies a range whose iterator type satisfies
ForwardIterator
(concept) |
|
specifies a range whose iterator type satisfies
BidirectionalIterator
(concept) |
|
specifies a range whose iterator type satisfies
RandomAccessIterator
(concept) |
|
Range access |
|
Defined in namespace
std::experimental::ranges
|
|
returns an iterator to the beginning of a range
(customization point object) |
|
returns an iterator to the end of a range
(customization point object) |
|
returns a reverse iterator to a range
(customization point object) |
|
returns a reverse end iterator to a range
(customization point object) |
|
Range primitives |
|
Defined in namespace
std::experimental::ranges
|
|
obtains the size of a range whose size can be calculated in constant time
(customization point object) |
|
checks whether a range is empty
(customization point object) |
|
obtains a pointer to the beginning of a contiguous range
(customization point object) |
|
obtains the iterator and sentinel types of a range
(alias template) |
Algorithms
Defined in header
<experimental/ranges/algorithm>
|
|
Non-modifying sequence operations |
|
Defined in namespace
std::experimental::ranges
|
|
checks if a predicate is
true
for all, any or none of the elements in a range
(function template) |
|
applies a function to a range of elements
(function template) |
|
returns the number of elements satisfying specific criteria
(function template) |
|
finds the first position where two ranges differ
(function template) |
|
determines if two sets of elements are the same
(function template) |
|
returns
true
if one range is lexicographically less than another
(function template) |
|
finds the first element satisfying specific criteria
(function template) |
|
finds the last sequence of elements in a certain range
(function template) |
|
searches for any one of a set of elements
(function template) |
|
finds the first two adjacent items that are equal (or satisfy a given predicate)
(function template) |
|
searches for a range of elements
(function template) |
|
searches for a number consecutive copies of an element in a range
(function template) |
|
Modifying sequence operations |
|
Defined in namespace
std::experimental::ranges
|
|
copies a range of elements to a new location
(function template) |
|
copies a number of elements to a new location
(function template) |
|
copies a range of elements in backwards order
(function template) |
|
moves a range of elements to a new location
(function template) |
|
moves a range of elements to a new location in backwards order
(function template) |
|
assigns a range of elements a certain value
(function template) |
|
assigns a value to a number of elements
(function template) |
|
applies a function to a range of elements
(function template) |
|
saves the result of a function in a range
(function template) |
|
saves the result of N applications of a function
(function template) |
|
removes elements satisfying specific criteria
(function template) |
|
copies a range of elements omitting those that satisfy specific criteria
(function template) |
|
replaces all values satisfying specific criteria with another value
(function template) |
|
copies a range, replacing elements satisfying specific criteria with another value
(function template) |
|
swaps two ranges of elements
(function template) |
|
reverses the order of elements in a range
(function template) |
|
creates a copy of a range that is reversed
(function template) |
|
rotates the order of elements in a range
(function template) |
|
copies and rotate a range of elements
(function template) |
|
randomly re-orders elements in a range
(function template) |
|
removes consecutive duplicate elements in a range
(function template) |
|
creates a copy of some range of elements that contains no consecutive duplicates
(function template) |
|
Partitioning operations |
|
Defined in namespace
std::experimental::ranges
|
|
determines if the range is partitioned by the given predicate
(function template) |
|
divides a range of elements into two groups
(function template) |
|
copies a range dividing the elements into two groups
(function template) |
|
divides elements into two groups while preserving their relative order
(function template) |
|
locates the partition point of a partitioned range
(function template) |
|
Sorting operations |
|
Defined in namespace
std::experimental::ranges
|
|
checks whether a range is sorted into ascending order
(function template) |
|
finds the largest sorted subrange
(function template) |
|
sorts a range into ascending order
(function template) |
|
sorts the first N elements of a range
(function template) |
|
copies and partially sorts a range of elements
(function template) |
|
sorts a range of elements while preserving order between equal elements
(function template) |
|
partially sorts the given range making sure that it is partitioned by the given element
(function template) |
|
Binary search operations (on sorted ranges) |
|
Defined in namespace
std::experimental::ranges
|
|
returns an iterator to the first element
not less
than the given value
(function template) |
|
returns an iterator to the first element
greater
than a certain value
(function template) |
|
determines if an element exists in a certain range
(function template) |
|
returns range of elements matching a specific key
(function template) |
|
Set operations (on sorted ranges) |
|
Defined in namespace
std::experimental::ranges
|
|
merges two sorted ranges
(function template) |
|
merges two ordered ranges in-place
(function template) |
|
returns
true
if one set is a subset of another
(function template) |
|
computes the difference between two sets
(function template) |
|
computes the intersection of two sets
(function template) |
|
computes the symmetric difference between two sets
(function template) |
|
computes the union of two sets
(function template) |
|
Heap operations |
|
Defined in namespace
std::experimental::ranges
|
|
checks if the given range is a max heap
(function template) |
|
finds the largest subrange that is a max heap
(function template) |
|
creates a max heap out of a range of elements
(function template) |
|
adds an element to a max heap
(function template) |
|
removes the largest element from a max heap
(function template) |
|
turns a max heap into a range of elements sorted in ascending order
(function template) |
|
Minimum/maximum operations |
|
Defined in namespace
std::experimental::ranges
|
|
returns the greater of the given values
(function template) |
|
returns the largest element in a range
(function template) |
|
returns the smaller of the given values
(function template) |
|
returns the smallest element in a range
(function template) |
|
returns the smaller and larger of two elements
(function template) |
|
returns the smallest and the largest elements in a range
(function template) |
|
Permutation operations |
|
Defined in namespace
std::experimental::ranges
|
|
determines if a sequence is a permutation of another sequence
(function template) |
|
generates the next greater lexicographic permutation of a range of elements
(function template) |
|
generates the next smaller lexicographic permutation of a range of elements
(function template) |