Namespaces
Variants

Constrained algorithms (since C++20)

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types

C++20 proporciona versiones restringidas de la mayoría de 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 range , y se admiten proyecciones y objetos llamables de puntero-a-miembro. Adicionalmente, los tipos de retorno de la mayoría de algoritmos han sido modificados para devolver toda la información potencialmente útil calculada durante la ejecución del algoritmo.

Contenidos

Objetos función de algoritmos

Un objeto función algoritmo (AFO), conocido informalmente como niebloid , es un objeto 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 correspondiente objeto función algoritmo.

Para un objeto función de algoritmo o , sea S el conjunto correspondiente de plantillas de función. Entonces para cualquier secuencia de argumentos args... , o ( args... ) es equivalente-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:

Algoritmos restringidos

Definido en el encabezado <algorithm>
Definido en el espacio de nombres std::ranges
Operaciones de secuencia no modificadoras
verifica si un predicado es true para todos, alguno o ninguno de los elementos en un rango
(objeto función de algoritmo)
aplica un objeto función unario a elementos de un rango
(objeto función algoritmo)
aplica un objeto función a los primeros N elementos de una secuencia
(objeto función de algoritmo)
devuelve el número de elementos que cumplen criterios específicos
(objeto función de algoritmo)
encuentra la primera posición donde dos rangos difieren
(objeto función de algoritmo)
determina si dos conjuntos de elementos son iguales
(objeto función de algoritmo)
devuelve true si un rango es lexicográficamente menor que otro
(objeto función algoritmo)
encuentra el primer elemento que satisface criterios específicos
(objeto función de algoritmo)
encuentra el último elemento que satisface criterios específicos
(objeto función de algoritmo)
encuentra la última secuencia de elementos en un rango determinado
(objeto función de algoritmo)
busca cualquiera de un conjunto de elementos
(objeto función de algoritmo)
encuentra los dos primeros elementos adyacentes que son iguales (o satisfacen un predicado dado)
(objeto función de algoritmo)
busca la primera ocurrencia de un rango de elementos
(objeto función de algoritmo)
busca la primera ocurrencia de un número de copias consecutivas de un elemento en un rango
(objeto función de algoritmo)
verifica si el rango contiene el elemento o subrango dado
(objeto función de algoritmo)
comprueba si un rango comienza con otro rango
(objeto función de algoritmo)
comprueba si un rango termina con otro rango
(objeto función de algoritmo)
Operaciones de modificación de secuencias
copia un rango de elementos a una nueva ubicación
(objeto función de algoritmo)
copia un número de elementos a una nueva ubicación
(objeto función de algoritmo)
copia un rango de elementos en orden inverso
(objeto función de algoritmo)
mueve un rango de elementos a una nueva ubicación
(objeto función de algoritmo)
mueve un rango de elementos a una nueva ubicación en orden inverso
(objeto función de algoritmo)
asigna un rango de elementos un valor determinado
(objeto función de algoritmo)
asigna un valor a una cantidad de elementos
(objeto función de algoritmo)
aplica una función a un rango 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)
elimina elementos que cumplen criterios específicos
(objeto función de algoritmo)
copia un rango de elementos omitiendo aquellos que cumplen criterios específicos
(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 elementos que cumplen criterios específicos con otro valor
(objeto función de algoritmo)
intercambia dos rangos de elementos
(objeto función de algoritmo)
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)
reordena aleatoriamente los elementos en un rango
(objeto función de algoritmo)
desplaza elementos en un rango
(objeto función de algoritmo)
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo)
elimina elementos duplicados consecutivos en un rango
(objeto función de algoritmo)
crea una copia de algún rango de elementos que no contiene duplicados consecutivos
(objeto función de algoritmo)
Operaciones de particionado
determina si el rango está particionado por el predicado dado
(objeto función 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 preservando su orden relativo
(objeto función de algoritmo)
localiza el punto de partición de un rango particionado
(objeto función de algoritmo)
Operaciones de ordenamiento
verifica si un rango está ordenado en orden ascendente
(objeto función de algoritmo)
encuentra el subrango ordenado más grande
(objeto función de algoritmo)
ordena un rango en orden ascendente
(objeto función de algoritmo)
ordena los primeros N elementos de un rango
(objeto función de algoritmo)
copia y ordena parcialmente un rango de elementos
(objeto función de algoritmo)
ordena un rango de elementos preservando el orden entre elementos iguales
(objeto función de algoritmo)
ordena parcialmente el rango dado asegurando que esté particionado por el elemento especificado
(objeto función de algoritmo)
Operaciones de búsqueda binaria (en rangos ordenados)
devuelve un iterador al primer elemento no menor que el valor dado
(objeto función de algoritmo)
devuelve un iterador al primer elemento mayor que cierto valor
(objeto función de algoritmo)
determina si un elemento existe en un rango parcialmente ordenado
(objeto función de algoritmo)
devuelve el rango de elementos que coinciden con una clave específica
(objeto función de algoritmo)
Operaciones de conjunto (sobre rangos ordenados)
combina dos rangos ordenados
(objeto función de algoritmo)
combina dos rangos ordenados in situ
(objeto función de algoritmo)
devuelve true si una secuencia es una 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 heap
verifica si el rango dado es un max heap
(objeto función de algoritmo)
encuentra el mayor subrango que es un montículo máximo
(objeto función de algoritmo)
crea un montículo máximo a partir de un rango de elementos
(objeto función de algoritmo)
añade un elemento a un montículo máximo
(objeto función de algoritmo)
elimina el elemento más grande de un montículo máximo
(objeto función de algoritmo)
convierte un max heap en un rango de elementos ordenados en orden ascendente
(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 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 restringidas

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

Operaciones de plegado restringidas

Definido en el encabezado <algorithm>
Definido en el espacio de nombres std::ranges
pliega hacia la izquierda un rango de elementos
(objeto función algoritmo)
pliega hacia la izquierda un rango de elementos usando el primer elemento como valor inicial
(objeto función algoritmo)
pliega hacia la derecha un rango de elementos
(objeto función algoritmo)
pliega hacia la derecha un rango de elementos usando el último elemento como valor inicial
(objeto función algoritmo)
pliega hacia la izquierda un rango de elementos, y retorna un pair (iterador, valor)
(objeto función algoritmo)
pliega hacia la izquierda un rango de elementos usando el primer elemento como valor inicial, y retorna un pair (iterador, optional )
(objeto función algoritmo)

Algoritmos de memoria no inicializada restringidos

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

Algoritmos de números aleatorios con restricciones

Definido en el encabezado <random>
Definido en el espacio de nombres std::ranges
llena un rango con números aleatorios de un generador uniforme de bits aleatorios
(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

Macro de prueba de características Valor Estándar Característica
__cpp_lib_algorithm_default_value_type 202403L (C++26) Inicialización de lista para algoritmos
__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 de plegado
__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 los estándares de C++ publicados anteriormente.

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