Namespaces
Variants

Algoritmos restringidos (desde C++20)

De es.cppreference.net
 
 
Biblioteca de algoritmos
Algoritmos restringidos y algoritmos sobre rangos (C++20)
Algoritmos restringidos, p. ej. ranges::copy, ranges::sort, ...
Operaciones de secuencia no modificadoras    
Operaciones por lotes
(C++17)
Operaciones de búsqueda
Operaciones de secuencia modificadoras
Operaciones de copia
(C++11)
(C++11)
Operaciones de intercambio
Operaciones de transformación
Operaciones de generación
Operaciones de eliminación
Operaciones de cambio de orden
(hasta C++17)(C++11)
(C++20)(C++20)
Operaciones de muestreo
(C++17)

Ordenamiento y operaciones relacionadas
Operaciones de particionado
(C++11)    

Operaciones de ordenamiento
Operaciones de búsqueda binaria
(en rangos particionados)
Operaciones de conjunto (en rangos ordenados)
Operaciones de fusión (en rangos ordenados)
Operaciones de montículo
Operaciones de mínimo/máximo
(C++11)
(C++17)
Operaciones de comparación lexicográfica
Operaciones de permutación


 
Algoritmos restringidos
Todos los nombres en este menú pertenecen al espacio de nombres std::ranges
Operaciones de secuencia no modificadoras
Operaciones de secuencia modificadoras
Operaciones de particionado
Operaciones de ordenamiento
Operaciones de búsqueda binaria (en rangos ordenados)
       
       
Operaciones de conjunto (en rangos ordenados)
Operaciones de montículo
Operaciones de mínimo/máximo
       
       
Operaciones de permutación
Operaciones de plegado
Operaciones sobre almacenamiento no inicializado
Tipos de retorno
 

C++20 proporciona restringidas versiones de la mayoría de los algoritmos en el espacio de nombres std::ranges. En estos algoritmos, un rango puede especificarse como un par iterador-centinela o como un único argumento rango, y se soportan proyecciones y objetos invocables puntero a miembro. Además, los tipos de retorno de la mayoría de los algoritmos se han modificado para devolver toda la información potencialmente útil calculada durante la ejecución del algoritmo.

Objetos de función de algoritmo

Un objeto de función de algoritmo (AFO), informalmente conocido como niebloid , es un objeto de punto de personalización (CPO) que se especifica como una o más plantillas de función sobrecargadas. El nombre de estas plantillas de función designa el objeto de función de algoritmo correspondiente.

Para un objeto de función de algoritmo o, sea S el correspondiente conjunto de plantillas de función. Entonces, para cualquier secuencia de argumentos args..., o(args...) es equivalente en expresión a s(args...), donde el resultado de la búsqueda de nombre para s es el conjunto de sobrecarga S.

Los algoritmos restringidos en el espacio de nombres std::ranges se definen como objetos de función de algoritmo. Como resultado:

Parámetros de rango

Algunas sobrecargas toman argumentos rango, se comportan como si estuvieran implementadas mediante el envío a la sobrecarga correspondiente en el espacio de nombres ranges que toma argumentos separados de iterador y centinela, donde para cada argumento de rango r:

  • El argumento de iterador correspondiente se inicializa con ranges::begin(r).
  • El argumento de centinela correspondiente se inicializa con ranges::end(r).
(hasta C++26)
  • El argumento de centinela correspondiente se inicializa con:
  • ranges::next(ranges::begin(r), ranges::end(r)), si el tipo de r modela forward_range y el cálculo de ranges::next cumple con los requisitos de complejidad especificados.
  • ranges::end(r) en caso contrario.
(desde C++26)

Operaciones de secuencia no modificadoras

Definido en el encabezado <algorithm>
Definido en el espacio de nombres std::ranges
Operaciones por lotes
aplica un objeto función a los elementos de un rango
(objeto función de algoritmo)
aplica un objeto función a los primeros N elementos de una secuencia
(objeto función de algoritmo)
Operaciones de búsqueda
comprueba si un predicado es true para todos, alguno o ninguno de los elementos de un rango
(objeto de función de algoritmo)
comprueba si el rango contiene el elemento o subrango dado
(objeto de función de algoritmo)
encuentra el primer elemento que satisface criterios específicos
(objeto de función de algoritmo)
encuentra el último elemento que satisface criterios específicos
(objeto de función de algoritmo)
encuentra la última secuencia de elementos en un rango determinado
(objeto de función de algoritmo)
busca cualquier elemento de un conjunto
(objeto de función de algoritmo)
encuentra los dos primeros elementos adyacentes que son iguales (o que satisfacen un predicado dado)
(objeto de función de algoritmo)
devuelve el número de elementos que satisfacen criterios específicos
(objeto de función de algoritmo)
encuentra la primera posición donde dos rangos difieren
(objeto de función de algoritmo)
determina si dos conjuntos de elementos son iguales
(objeto de función de algoritmo)
busca la primera aparición de un rango de elementos
(objeto de función de algoritmo)
busca la primera aparición de un número de copias consecutivas de un elemento en un rango
(objeto de función de algoritmo)
comprueba si un rango comienza con otro rango
(objeto de función de algoritmo)
comprueba si un rango termina con otro rango
(objeto de función de algoritmo)
Operaciones de plegado
pliega a la izquierda un rango de elementos
(objeto función de algoritmo)
pliega a la izquierda un rango de elementos usando el primer elemento como valor inicial
(objeto función de algoritmo)
pliega a la derecha un rango de elementos
(objeto función de algoritmo)
pliega a la derecha un rango de elementos usando el último elemento como valor inicial
(objeto función de algoritmo)
pliega a la izquierda un rango de elementos, y devuelve un pair (iterador, valor)
(objeto función de algoritmo)
pliega a la izquierda un rango de elementos usando el primer elemento como valor inicial, y devuelve un pair (iterador, optional)
(objeto función de algoritmo)

Operaciones de modificación de secuencias

Definido en el encabezado <algorithm>
Definido en el espacio de nombres std::ranges
Operaciones de copia
copia un rango de elementos a una nueva ubicación
(objeto de función de algoritmo)
copia un número de elementos a una nueva ubicación
(objeto de función de algoritmo)
copia un rango de elementos en orden inverso
(objeto de función de algoritmo)
mueve un rango de elementos a una nueva ubicación
(objeto de función de algoritmo)
mueve un rango de elementos a una nueva ubicación en orden inverso
(objeto de función de algoritmo)
Operaciones de intercambio
intercambia dos rangos de elementos
(objeto función de algoritmo)
Operaciones de transformación
aplica una función a un rango de elementos
(objeto función de algoritmo)
reemplaza todos los valores que cumplen criterios específicos con otro valor
(objeto función de algoritmo)
copia un rango, reemplazando los elementos que cumplen criterios específicos con otro valor
(objeto función de algoritmo)
Operaciones de generación
asigna un cierto valor a un rango de elementos
(objeto función de algoritmo)
asigna un valor a un número de elementos
(objeto función de algoritmo)
guarda el resultado de una función en un rango
(objeto función de algoritmo)
guarda el resultado de N aplicaciones de una función
(objeto función de algoritmo)
Operaciones de eliminación
elimina elementos que cumplen criterios específicos
(objeto de función de algoritmo)
copia un rango de elementos omitiendo aquellos que cumplen criterios específicos
(objeto de función de algoritmo)
elimina elementos duplicados consecutivos en un rango
(objeto de función de algoritmo)
crea una copia de algún rango de elementos que no contiene duplicados consecutivos
(objeto de función de algoritmo)
Operaciones que cambian el orden
invierte el orden de los elementos en un rango
(objeto función de algoritmo)
crea una copia de un rango que está invertido
(objeto función de algoritmo)
rota el orden de los elementos en un rango
(objeto función de algoritmo)
copia y rota un rango de elementos
(objeto función de algoritmo)
desplaza elementos en un rango
(objeto función de algoritmo)
reordena aleatoriamente elementos en un rango
(objeto función de algoritmo)
Operaciones de muestreo
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo)

Ordenación y operaciones relacionadas

Definido en el encabezado<algorithm>
Definido en el espacio de nombresstd::ranges
Operaciones de partición
determina si el rango está particionado por el predicado dado
(objeto función de algoritmo)
divide un rango de elementos en dos grupos
(objeto función de algoritmo)
copia un rango dividiendo los elementos en dos grupos
(objeto función de algoritmo)
divide los elementos en dos grupos mientras preserva su orden relativo dentro de cada grupo
(objeto función de algoritmo)
localiza el punto de partición de un rango particionado
(objeto función de algoritmo)
Operaciones de ordenación
comprueba si un rango está ordenado
(objeto de función de algoritmo)
encuentra el subrango ordenado más grande
(objeto de función de algoritmo)
ordena un rango de elementos
(objeto de función de algoritmo)
ordena los primeros N elementos de un rango
(objeto de función de algoritmo)
copia y ordena parcialmente un rango de elementos
(objeto de función de algoritmo)
ordena un rango de elementos preservando el orden relativo entre elementos equivalentes
(objeto de función de algoritmo)
encuentra el N-ésimo elemento si el rango estuviera ordenado
(objeto de función de algoritmo)
Operaciones de búsqueda binaria (en rangos ordenados)
encuentra el primer elemento no menor que el valor dado mediante búsqueda binaria
(objeto de función de algoritmo)
encuentra el primer elemento mayor que el valor dado mediante búsqueda binaria
(objeto de función de algoritmo)
determina si un elemento existe en un rango mediante búsqueda binaria
(objeto de función de algoritmo)
encuentra el rango de elementos que coinciden con el valor dado mediante búsqueda binaria
(objeto de función de algoritmo)
Operaciones de conjuntos (en rangos ordenados)
determina si una secuencia es subsecuencia de otra
(objeto función de algoritmo)
calcula la diferencia entre dos conjuntos
(objeto función de algoritmo)
calcula la intersección de dos conjuntos
(objeto función de algoritmo)
calcula la diferencia simétrica entre dos conjuntos
(objeto función de algoritmo)
calcula la unión de dos conjuntos
(objeto función de algoritmo)
Operaciones de fusión (en rangos ordenados)
fusiona dos rangos ordenados
(objeto función de algoritmo)
fusiona dos rangos ordenados en el lugar
(objeto función de algoritmo)
Operaciones de heap
comprueba si el rango dado es un heap máximo
(objeto función de algoritmo)
encuentra el subrango más grande que es un heap máximo
(objeto función de algoritmo)
crea un heap máximo a partir de un rango de elementos
(objeto función de algoritmo)
agrega un elemento a un heap máximo
(objeto función de algoritmo)
elimina el elemento más grande de un heap máximo
(objeto función de algoritmo)
convierte un heap máximo en un rango ordenado de elementos
(objeto función de algoritmo)
Operaciones de mínimo/máximo
devuelve el mayor de los valores dados
(objeto función de algoritmo)
devuelve el elemento más grande en un rango
(objeto función de algoritmo)
devuelve el menor de los valores dados
(objeto función de algoritmo)
devuelve el elemento más pequeño en un rango
(objeto función de algoritmo)
devuelve el menor y el mayor de dos elementos
(objeto función de algoritmo)
devuelve los elementos más pequeño y más grande en un rango
(objeto función de algoritmo)
limita un valor entre un par de valores límite
(objeto función de algoritmo)
Operaciones de comparación lexicográfica
compara dos rangos lexicográficamente
(objeto de función de algoritmo)
Operaciones de permutación
determina si una secuencia es una permutación de otra secuencia
(objeto función de algoritmo)
genera la siguiente permutación lexicográfica mayor de un rango de elementos
(objeto función de algoritmo)
genera la siguiente permutación lexicográfica más pequeña de un rango de elementos
(objeto función de algoritmo)

Operaciones numéricas

Definido en el encabezado <numeric>
Definido en espacio de nombres std::ranges
rellena un rango con incrementos sucesivos del valor inicial
(objeto función de algoritmo)

Especializados <memory> algoritmos

Definido en el encabezado <memory>
Definido en el espacio de nombres std::ranges
Construcción (por lotes) de objetos
crea un objeto en una dirección dada
(objeto de función de algoritmo)
copia un rango de objetos a un área de memoria no inicializada
(objeto de función de algoritmo)
copia un número de objetos a un área de memoria no inicializada
(objeto de función de algoritmo)
copia un objeto a un área de memoria no inicializada, definida por un rango
(objeto de función de algoritmo)
copia un objeto a un área de memoria no inicializada, definida por un inicio y un conteo
(objeto de función de algoritmo)
mueve un rango de objetos a un área de memoria no inicializada
(objeto de función de algoritmo)
mueve un número de objetos a un área de memoria no inicializada
(objeto de función de algoritmo)
construye objetos mediante inicialización por defecto en un área de memoria no inicializada, definida por un rango
(objeto de función de algoritmo)
construye objetos mediante inicialización por defecto en un área de memoria no inicializada, definida por un inicio y un conteo
(objeto de función de algoritmo)
construye objetos mediante inicialización por valor en un área de memoria no inicializada, definida por un rango
(objeto de función de algoritmo)
construye objetos mediante inicialización por valor en un área de memoria no inicializada, definida por un inicio y un conteo
(objeto de función de algoritmo)
Destrucción de objetos (en lote)
destruye un rango de objetos
(objeto función de algoritmo)
destruye un número de objetos en un rango
(objeto función de algoritmo)
destruye un objeto en una dirección dada
(objeto función de algoritmo)

Especializados <random> algoritmos

Definido en el encabezado <random>
Definido en espacio de nombres std::ranges
llena un rango con números aleatorios a partir de un generador de bits aleatorio uniforme
(objeto función de algoritmo)

Tipos de retorno

Definido en el encabezado <algorithm>
Definido en el espacio de nombres std::ranges
proporciona una forma de almacenar un iterador y un objeto función como una única unidad
(plantilla de clase)
proporciona una forma de almacenar dos iteradores como una única unidad
(plantilla de clase)
proporciona una forma de almacenar dos iteradores como una única unidad
(plantilla de clase)
proporciona una forma de almacenar tres iteradores como una única unidad
(plantilla de clase)
proporciona una forma de almacenar tres iteradores como una única unidad
(plantilla de clase)
proporciona una forma de almacenar dos objetos o referencias del mismo tipo como una única unidad
(plantilla de clase)
proporciona una forma de almacenar un iterador y una bandera booleana como una única unidad
(plantilla de clase)
proporciona una forma de almacenar un iterador y un valor como una única unidad
(plantilla de clase)
proporciona una forma de almacenar un iterador y un valor como una única unidad
(plantilla de clase)

Notas

Prueba de características macro Valor Estándar Característica
__cpp_lib_algorithm_default_value_type 202403L (C++26) Inicialización de lista para algoritmos
__cpp_lib_parallel_algorithm 202506L (C++26) Algoritmos de rango paralelos
__cpp_lib_ranges 201911L (C++20) Biblioteca de rangos y algoritmos restringidos
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges algoritmos fold
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with, std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left, std::shift_right
202202L (C++23) std::ranges::shift_left, std::ranges::shift_right
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares C++ publicados anteriormente.

DR Aplicado a Comportamiento según lo publicado Comportamiento correcto
P3136R1 C++20 niebloids se permitía que se especificaran como
entidades especiales distintas de los objetos función
se requería que se especificaran
como objetos función