Namespaces
Variants

Extensions for ranges

From cppreference.net

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 .

Contenidos

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>
Conceptos relacionados con iteradores
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)