Extensions for ranges
From cppreference.net
<
cpp
|
experimental
Las Extensiones de C++ para Rangos, ISO/IEC TS 21425:2017, especifican una modificación al lenguaje central y definen nuevos componentes para la biblioteca estándar de C++ listados en esta página.
El Ranges TS se basa en el estándar C++14 modificado por el Concepts TS .
Cambios en el lenguaje central
El Ranges TS modifica la especificación de el bucle for basado en rangos para permitir iteradores de inicio y fin de tipos diferentes. Este cambio permite el uso de centinelas y también está presente en C++17.
Conceptos
Conceptos fundamentales del lenguaje |
|
|
Definido en el encabezado
<experimental/ranges/concepts>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un tipo es igual a otro tipo
(concept) |
|
|
especifica que un tipo se deriva de otro tipo
(concept) |
|
|
especifica que un tipo es implícitamente convertible a otro tipo
(concept) |
|
|
especifica que dos tipos comparten un tipo de referencia común
(concept) |
|
|
especifica que dos tipos comparten un tipo común
(concept) |
|
|
especifica que un tipo es un tipo integral
(concepto) |
|
|
especifica que un tipo es un tipo integral con signo
(concept) |
|
|
especifica que un tipo es un tipo integral que no está firmado
(concepto) |
|
|
especifica que un tipo puede ser asignado desde otro tipo
(concepto) |
|
|
especifica que un tipo puede ser intercambiado o que dos tipos pueden ser intercambiados entre sí
(concept) |
|
Conceptos de comparación |
|
|
Definido en el encabezado
<experimental/ranges/concepts>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un tipo puede ser utilizado en contextos booleanos
(concept) |
|
|
especifica que dos tipos pueden ser comparados para igualdad usando los operadores
==
y
!
=
(concepto) |
|
|
especifica que el operador
==
es una relación de equivalencia
(concepto) |
|
|
especifica que los operadores de comparación en el tipo producen un orden total
(concept) |
|
Conceptos de objeto |
|
|
Definido en el encabezado
<experimental/ranges/concepts>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un objeto del tipo puede ser destruido
(concept) |
|
|
especifica que una variable del tipo puede ser construida desde o enlazada a un conjunto de tipos de argumentos
(concepto) |
|
|
especifica que un objeto de un tipo puede ser construido por defecto
(concept) |
|
|
especifica que un objeto de un tipo puede ser construido por movimiento
(concepto) |
|
|
especifica que un objeto de un tipo puede ser copiado mediante construcción y movido mediante construcción
(concept) |
|
|
especifica que un objeto de un tipo puede ser movido e intercambiado
(concept) |
|
|
especifica que un objeto de un tipo puede ser copiado, movido e intercambiado
(concept) |
|
|
especifica que un objeto de un tipo puede ser copiado, movido, intercambiado y construido por defecto
(concept) |
|
especifica que un tipo es regular, es decir, es tanto
Semiregular
como
EqualityComparable
(concepto) |
|
Conceptos invocables |
|
|
Definido en el encabezado
<experimental/ranges/concepts>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un tipo invocable puede ser invocado con un conjunto dado de tipos de argumentos
(concept) |
|
|
especifica que un tipo invocable es un predicado booleano
(concept) |
|
|
especifica que un tipo invocable es una relación binaria
(concepto) |
|
especifica que una
Relation
impone un ordenamiento estricto débil
(concepto) |
|
Concepto de generador de números aleatorios |
|
|
Definido en el encabezado
<experimental/ranges/random>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un tipo califica como generador uniforme de números aleatorios
(concepto) |
|
Utilidades generales
Componentes de utilidad |
|
|
Definido en el encabezado
<experimental/ranges/utility>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
intercambia el valor de dos objetos
(objeto de punto de personalización) |
|
|
reemplaza el argumento con un nuevo valor y devuelve su valor anterior
(plantilla de función) |
|
Objetos función |
|
|
Definido en el encabezado
<experimental/ranges/functional>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
invoca un objeto
Callable
con los argumentos dados
(plantilla de función) |
|
|
objeto de función que implementa
x
==
y
(plantilla de clase) |
|
|
objeto función que implementa
x
!
=
y
(plantilla de clase) |
|
|
objeto función que implementa
x
>
y
(plantilla de clase) |
|
|
objeto función que implementa
x
<
y
(plantilla de clase) |
|
|
objeto función que implementa
x
>=
y
(plantilla de clase) |
|
|
objeto función que implementa
x
<=
y
(plantilla de clase) |
|
|
objeto función que devuelve su argumento sin cambios
(clase) |
|
Metaprogramación y rasgos de tipo |
|
|
Definido en el encabezado
<experimental/ranges/type_traits>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
verifica si los objetos de un tipo pueden intercambiarse con objetos del mismo tipo o de diferente tipo
(plantilla de clase) |
|
|
determinar el tipo de referencia común de un conjunto de tipos
(plantilla de clase) |
|
|
determinar el tipo común de un conjunto de tipos
(plantilla de clase) |
|
Pares y tuplas etiquetados |
|
|
Definido en el encabezado
<experimental/ranges/utility>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
especifica que un tipo es un especificador de etiqueta
(concepto) |
|
|
especifica que un tipo representa un especificador de etiqueta y su tipo de elemento
(concept) |
|
|
aumenta un tipo similar a una tupla con accesores con nombre
(plantilla de clase) |
|
|
plantilla de alias para un
std::pair
etiquetado
(plantilla de alias) |
|
función de conveniencia para crear un
tagged_pair
(plantilla de función) |
|
|
Definido en el encabezado
<experimental/ranges/tuple>
|
|
|
plantilla de alias para un
std::tuple
etiquetado
(plantilla de alias) |
|
función de conveniencia para crear un
tagged_tuple
(plantilla de función) |
|
|
Definido en el encabezado
<experimental/ranges/algorithm>
|
|
|
Definido en el espacio de nombres
std::experimental::ranges::tag
|
|
|
especificadores de etiquetas para usar con
ranges::tagged
(clase) |
|
Iteradores
|
Definido en el encabezado
<experimental/ranges/iterator>
|
|
|
|
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
Conceptos de iterador |
|
especifica que un tipo es legible aplicando el operador
*
(concepto) |
|
|
especifica que un valor puede ser escrito al objeto referenciado por un iterador
(concept) |
|
especifica que un
Semiregular
tipo puede ser incrementado con operadores de pre- y post-incremento
(concepto) |
|
especifica que la operación de incremento en un tipo
WeaklyIncrementable
conserva la igualdad y que el tipo es
EqualityComparable
(concepto) |
|
|
especifica que los objetos de un tipo pueden ser incrementados y desreferenciados
(concept) |
|
especifica que objetos de un tipo son un centinela para un
Iterator
type
(concept) |
|
especifica que el operador
-
puede aplicarse a un iterador y un centinela para calcular su diferencia en tiempo constante
(concepto) |
|
|
especifica que un tipo es un iterador de entrada, es decir, que sus valores referenciados pueden leerse y puede ser pre-incrementado y post-incrementado
(concepto) |
|
|
especifica que un tipo es un iterador de salida para un tipo de valor dado, es decir, se pueden escribir valores de ese tipo en él y puede ser pre-incrementado y post-incrementado
(concepto) |
|
especifica que un
InputIterator
es un iterador de avance, que admite comparación de igualdad y paso múltiple
(concepto) |
|
especifica que un
ForwardIterator
es un iterador bidireccional, que admite movimiento hacia atrás
(concepto) |
|
especifica que un
BidirectionalIterator
es un iterador de acceso aleatorio, que admite avance en tiempo constante y subíndices
(concepto) |
|
Conceptos de invocables indirectos |
|
especifica que un tipo invocable puede ser invocado con el resultado de desreferenciar un
Readable
type
(concept) |
|
especifica que un objeto invocable, cuando se invoca con el resultado de desreferenciar un
Readable
type, satisface
Predicate
(concept) |
|
especifica que un objeto invocable, cuando se invoca con el resultado de desreferenciar algunos
Readable
tipos, satisface
Relation
(concepto) |
|
especifica que un objeto invocable, cuando se invoca con el resultado de desreferenciar algunos
Readable
tipos, satisface
StrictWeakOrder
(concepto) |
|
Requisitos comunes de algoritmos |
|
especifica que los valores pueden ser movidos desde un
Readable
tipo hacia un
Writable
tipo
(concepto) |
|
especifica que los valores pueden ser movidos desde un
Readable
tipo a un
Writable
tipo y que el movimiento puede realizarse a través de un objeto intermedio
(concepto) |
|
especifica que los valores pueden copiarse desde un
Readable
tipo a un
Writable
tipo
(concepto) |
|
especifica que los valores pueden copiarse desde un
Readable
tipo a un
Writable
tipo y que la copia puede realizarse a través de un objeto intermedio
(concepto) |
|
especifica que los valores referenciados por dos
Readable
tipos pueden intercambiarse
(concepto) |
|
especifica que los valores referenciados por dos
Readable
tipos pueden ser comparados
(concepto) |
|
|
especifica los requisitos comunes de los algoritmos que reordenan elementos in situ
(concept) |
|
|
especifica los requisitos de los algoritmos que fusionan secuencias ordenadas en una secuencia de salida copiando elementos
(concept) |
|
|
especifica los requisitos comunes de los algoritmos que permutan secuencias en secuencias ordenadas
(concept) |
|
Utilidades de conceptos |
|
calcular el resultado de invocar un objeto invocable sobre el resultado de desreferenciar un conjunto de
Readable
tipos
(plantilla de clase) |
|
|
plantilla auxiliar para especificar las restricciones en algoritmos que aceptan proyecciones
(plantilla de clase) |
|
Primitivas de iterador |
|
Utilidades de iteradores |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
convierte el resultado de desreferenciar un objeto a su tipo de referencia a valor asociado
(objeto de punto de personalización) |
|
|
intercambia los valores referenciados por dos objetos desreferenciables
(objeto de punto de personalización) |
|
Rasgos del iterador |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
obtiene el tipo de diferencia de un
WeaklyIncrementable
type
(plantilla de clase) |
|
obtiene el tipo de valor de un
Readable
type
(plantilla de clase) |
|
|
obtiene la categoría de iterador de un tipo de iterador de entrada
(plantilla de clase) |
|
|
clase de rasgos de compatibilidad que recopila los tipos asociados de un iterador
(plantilla de alias) |
|
|
obtiene los tipos de referencia asociados de un objeto desreferenciable
(alias template) |
|
Etiquetas de categoría de iterador |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
tipos de clases vacías utilizadas para indicar categorías de iteradores
(clase) |
|
std::iterator_traits especializaciones |
|
|
Definido en el espacio de nombres
std
|
|
|
especializa
std::iterator_traits
para iteradores de ranges TS
(especialización de plantilla de clase) |
|
Operaciones de iterador |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
avanza un iterador una distancia determinada
(plantilla de función) |
|
|
devuelve la distancia entre un iterador y un centinela, o entre el inicio y el final de un rango
(plantilla de función) |
|
|
incrementar un iterador
(plantilla de función) |
|
|
decrementar un iterador
(plantilla de función) |
|
Adaptadores de iteradores |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
adaptador de iterador para recorrido en orden inverso
(plantilla de clase) |
|
|
adaptador de iterador para inserción al final de un contenedor
(plantilla de clase) |
|
|
adaptador de iterador para inserción al frente de un contenedor
(plantilla de clase) |
|
|
adaptador de iterador para inserción en un contenedor
(plantilla de clase) |
|
|
adaptador de iterador que se desreferencia a una referencia de valor R
(plantilla de clase) |
|
adaptador de centinela para usar con
move_iterator
(plantilla de clase) |
|
|
adaptar un par iterador-centinela en un tipo de iterador común para usar con algoritmos heredados
(plantilla de clase) |
|
|
adaptador de iterador que lleva un registro de su distancia desde su posición inicial
(plantilla de clase) |
|
|
tipo de centinela vacío para usar con tipos de iterador que conocen el límite de su rango
(clase) |
|
|
contenedor para un iterador potencialmente colgante
(plantilla de clase) |
|
plantilla de alias que envuelve el tipo iterador de un rango de valor r con
dangling
(plantilla de alias) |
|
|
tipo centinela utilizado con cualquier iterador para denotar un rango infinito
(clase) |
|
Iteradores de flujo |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
iterador de entrada que lee desde
std::basic_istream
(plantilla de clase) |
|
|
iterador de salida que escribe en
std::basic_ostream
(plantilla de clase) |
|
|
iterador de entrada que lee desde
std::basic_streambuf
(plantilla de clase) |
|
|
iterador de salida que escribe en
std::basic_streambuf
(plantilla de clase) |
|
Rangos
|
Definido en el encabezado
<experimental/ranges/range>
|
|
Conceptos de rango |
|
especifica que un tipo es un rango, es decir, proporciona un
begin
iterador y un
end
centinela
(concepto) |
|
|
especifica que un rango conoce su tamaño en tiempo constante
(concepto) |
|
|
especifica que un rango es una vista, es decir, tiene operaciones de copia/movimiento/asignación en tiempo constante
(concepto) |
|
|
especifica que un rango tiene tipos de iterador y centinela idénticos
(concepto) |
|
especifica un rango cuyo tipo de iterador satisface
InputIterator
(concepto) |
|
especifica un rango cuyo tipo de iterador satisface
OutputIterator
(concepto) |
|
especifica un rango cuyo tipo de iterador satisface
ForwardIterator
(concepto) |
|
especifica un rango cuyo tipo de iterador satisface
BidirectionalIterator
(concepto) |
|
especifica un rango cuyo tipo de iterador satisface
RandomAccessIterator
(concepto) |
|
Acceso a rangos |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
retorna un iterador al inicio de un rango
(objeto de punto de personalización) |
|
|
retorna un iterador al final de un rango
(objeto de punto de personalización) |
|
|
retorna un iterador inverso a un rango
(objeto de punto de personalización) |
|
|
retorna un iterador final inverso a un rango
(objeto de punto de personalización) |
|
Primitivas de rango |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
obtiene el tamaño de un rango cuyo tamaño puede calcularse en tiempo constante
(objeto de punto de personalización) |
|
|
verifica si un rango está vacío
(objeto de punto de personalización) |
|
|
obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización) |
|
|
obtiene los tipos de iterador y centinela de un rango
(plantilla de alias) |
|
Algoritmos
|
Definido en el encabezado
<experimental/ranges/algorithm>
|
|
Operaciones de secuencia no modificadoras |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
verifica si un predicado es
true
para todos, alguno o ninguno de los elementos en un rango
(plantilla de función) |
|
|
aplica una función a un rango de elementos
(plantilla de función) |
|
|
devuelve el número de elementos que satisfacen criterios específicos
(plantilla de función) |
|
|
encuentra la primera posición donde dos rangos difieren
(plantilla de función) |
|
|
determina si dos conjuntos de elementos son iguales
(function template) |
|
|
devuelve
true
si un rango es lexicográficamente menor que otro
(plantilla de función) |
|
|
encuentra el primer elemento que satisface criterios específicos
(plantilla de función) |
|
|
encuentra la última secuencia de elementos en un rango determinado
(plantilla de función) |
|
|
busca cualquiera de un conjunto de elementos
(plantilla de función) |
|
|
encuentra los dos primeros elementos adyacentes que son iguales (o satisfacen un predicado dado)
(plantilla de función) |
|
|
busca un rango de elementos
(plantilla de función) |
|
|
busca un número de copias consecutivas de un elemento en un rango
(plantilla de función) |
|
Operaciones de modificación de secuencias |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
copia un rango de elementos a una nueva ubicación
(plantilla de función) |
|
|
copia un número de elementos a una nueva ubicación
(plantilla de función) |
|
|
copia un rango de elementos en orden inverso
(plantilla de función) |
|
|
mueve un rango de elementos a una nueva ubicación
(plantilla de función) |
|
|
mueve un rango de elementos a una nueva ubicación en orden inverso
(plantilla de función) |
|
|
asigna un rango de elementos un valor determinado
(function template) |
|
|
asigna un valor a una cantidad de elementos
(plantilla de función) |
|
|
aplica una función a un rango de elementos
(plantilla de función) |
|
|
guarda el resultado de una función en un rango
(plantilla de función) |
|
|
guarda el resultado de N aplicaciones de una función
(plantilla de función) |
|
|
elimina elementos que cumplen criterios específicos
(plantilla de función) |
|
|
copia un rango de elementos omitiendo aquellos que cumplen criterios específicos
(plantilla de función) |
|
|
reemplaza todos los valores que cumplen criterios específicos con otro valor
(plantilla de función) |
|
|
copia un rango, reemplazando elementos que cumplen criterios específicos con otro valor
(plantilla de función) |
|
|
intercambia dos rangos de elementos
(plantilla de función) |
|
|
invierte el orden de los elementos en un rango
(plantilla de función) |
|
|
crea una copia de un rango que está invertido
(plantilla de función) |
|
|
rota el orden de los elementos en un rango
(plantilla de función) |
|
|
copia y rota un rango de elementos
(plantilla de función) |
|
|
reordena aleatoriamente los elementos en un rango
(plantilla de función) |
|
|
elimina elementos duplicados consecutivos en un rango
(plantilla de función) |
|
|
crea una copia de algún rango de elementos que no contiene duplicados consecutivos
(plantilla de función) |
|
Operaciones de particionado |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
determina si el rango está particionado por el predicado dado
(plantilla de función) |
|
|
divide un rango de elementos en dos grupos
(plantilla de función) |
|
|
copia un rango dividiendo los elementos en dos grupos
(plantilla de función) |
|
|
divide los elementos en dos grupos preservando su orden relativo
(plantilla de función) |
|
|
localiza el punto de partición de un rango particionado
(plantilla de función) |
|
Operaciones de ordenamiento |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
comprueba si un rango está ordenado en orden ascendente
(plantilla de función) |
|
|
encuentra el subrango ordenado más grande
(plantilla de función) |
|
|
ordena un rango en orden ascendente
(plantilla de función) |
|
|
ordena los primeros N elementos de un rango
(plantilla de función) |
|
|
copia y ordena parcialmente un rango de elementos
(plantilla de función) |
|
|
ordena un rango de elementos preservando el orden entre elementos iguales
(plantilla de función) |
|
|
ordena parcialmente el rango dado asegurando que esté particionado por el elemento especificado
(plantilla de función) |
|
Operaciones de búsqueda binaria (en rangos ordenados) |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
devuelve un iterador al primer elemento
no menor
que el valor dado
(plantilla de función) |
|
|
devuelve un iterador al primer elemento
mayor
que cierto valor
(plantilla de función) |
|
|
determina si un elemento existe en un rango determinado
(plantilla de función) |
|
|
devuelve el rango de elementos que coinciden con una clave específica
(plantilla de función) |
|
Operaciones de conjunto (en rangos ordenados) |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
combina dos rangos ordenados
(plantilla de función) |
|
|
combina dos rangos ordenados in situ
(plantilla de función) |
|
|
devuelve
true
si un conjunto es subconjunto de otro
(plantilla de función) |
|
|
calcula la diferencia entre dos conjuntos
(plantilla de función) |
|
|
calcula la intersección de dos conjuntos
(plantilla de función) |
|
|
calcula la diferencia simétrica entre dos conjuntos
(plantilla de función) |
|
|
calcula la unión de dos conjuntos
(plantilla de función) |
|
Operaciones de heap |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
verifica si el rango dado es un montículo máximo
(plantilla de función) |
|
|
encuentra el mayor subrango que es un montículo máximo
(plantilla de función) |
|
|
crea un montículo máximo a partir de un rango de elementos
(plantilla de función) |
|
|
agrega un elemento a un montículo máximo
(plantilla de función) |
|
|
elimina el elemento más grande de un montículo máximo
(plantilla de función) |
|
|
convierte un montículo máximo en un rango de elementos ordenados de forma ascendente
(plantilla de función) |
|
Operaciones de mínimo/máximo |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
devuelve el mayor de los valores dados
(plantilla de función) |
|
|
devuelve el elemento más grande en un rango
(plantilla de función) |
|
|
devuelve el menor de los valores dados
(plantilla de función) |
|
|
devuelve el elemento más pequeño en un rango
(plantilla de función) |
|
|
devuelve el menor y mayor de dos elementos
(plantilla de función) |
|
|
devuelve los elementos más pequeño y más grande en un rango
(plantilla de función) |
|
Operaciones de permutación |
|
|
Definido en el espacio de nombres
std::experimental::ranges
|
|
|
determina si una secuencia es una permutación de otra secuencia
(plantilla de función) |
|
|
genera la siguiente permutación lexicográfica mayor de un rango de elementos
(plantilla de función) |
|
|
genera la siguiente permutación lexicográfica más pequeña de un rango de elementos
(plantilla de función) |
|