Algorithms library
La biblioteca de algoritmos define funciones para diversos propósitos (por ejemplo, búsqueda, ordenación, conteo, manipulación) que operan sobre rangos de elementos. Nótese que un
rango
se define como
[
first
,
last
)
donde
last
se refiere al elemento
posterior
al último elemento a inspeccionar o modificar.
Algoritmos restringidos (desde C++20)
C++20 proporciona
versiones restringidas
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 de
range
, y se admiten proyecciones y objetos invocables de puntero-a-miembro. Adicionalmente, los
tipos de retorno
de la mayoría de los algoritmos han sido modificados para devolver toda la información potencialmente útil calculada durante la ejecución del algoritmo.
std::vector<int> v{7, 1, 4, 0, -1}; std::ranges::sort(v); // algoritmo restringido
Políticas de ejecución (since C++17)
La mayoría de los algoritmos tienen sobrecargas que aceptan políticas de ejecución. Los algoritmos de la biblioteca estándar admiten varias políticas de ejecución , y la biblioteca proporciona tipos y objetos de política de ejecución correspondientes. Los usuarios pueden seleccionar una política de ejecución estáticamente invocando un algoritmo paralelo con un objeto de política de ejecución del tipo correspondiente.
Las implementaciones de la biblioteca estándar (pero no los usuarios) pueden definir políticas de ejecución adicionales como una extensión. La semántica de los algoritmos paralelos invocados con un objeto de política de ejecución de tipo definido por la implementación está definida por la implementación.
Las versiones paralelas de los algoritmos (excepto
std::for_each
y
std::for_each_n
) pueden realizar copias arbitrarias de elementos de los rangos, siempre que tanto
std::
is_trivially_copy_constructible_v
<
T
>
como
std::
is_trivially_destructible_v
<
T
>
sean
true
, donde
T
es el tipo de elementos.
|
Definido en el encabezado
<execution>
|
|
|
Definido en el espacio de nombres
std::execution
|
|
|
(C++17)
(C++17)
(C++17)
(C++20)
|
tipos de políticas de ejecución
(clase) |
|
(C++17)
(C++17)
(C++17)
(C++20)
|
objetos globales de políticas de ejecución
(constante) |
|
Definido en el espacio de nombres
std
|
|
|
(C++17)
|
comprueba si una clase representa una política de ejecución
(plantilla de clase) |
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_parallel_algorithm
|
201603L
|
(C++17) | Algoritmos paralelos |
__cpp_lib_execution
|
201603L
|
(C++17) | Políticas de ejecución |
201902L
|
(C++20) | std::execution::unsequenced_policy |
Operaciones de secuencia no modificadoras
Operaciones por lotes
|
Definido en el encabezado
<algorithm>
|
|
|
aplica un
objeto función
unario a elementos de un
rango
(plantilla de función) |
|
|
(C++20)
|
aplica un
objeto función
unario a elementos de un
rango
(objeto función de algoritmo) |
|
(C++17)
|
aplica un objeto función a los primeros N elementos de una secuencia
(plantilla de función) |
|
(C++20)
|
aplica un objeto función a los primeros N elementos de una secuencia
(objeto función de algoritmo) |
Operaciones de búsqueda
|
Definido en el encabezado
<algorithm>
|
|
|
(C++11)
(C++11)
(C++11)
|
verifica si un predicado es
true
para todos, alguno o ninguno de los elementos en un rango
(plantilla de función) |
|
(C++20)
(C++20)
(C++20)
|
verifica si un predicado es
true
para todos, alguno o ninguno de los elementos en un rango
(objeto función de algoritmo) |
|
(C++23)
(C++23)
|
verifica si el rango contiene el elemento o subrango dado
(objeto función de algoritmo) |
|
(C++11)
|
encuentra el primer elemento que satisface criterios específicos
(plantilla de función) |
|
(C++20)
(C++20)
(C++20)
|
encuentra el primer elemento que satisface criterios específicos
(objeto función de algoritmo) |
|
(C++23)
(C++23)
(C++23)
|
encuentra el último elemento que satisface criterios específicos
(objeto función de algoritmo) |
|
encuentra la última secuencia de elementos en un rango determinado
(plantilla de función) |
|
|
(C++20)
|
encuentra la última secuencia de elementos en un rango determinado
(objeto función de algoritmo) |
|
busca cualquiera de un conjunto de elementos
(plantilla de función) |
|
|
(C++20)
|
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)
(plantilla de función) |
|
|
(C++20)
|
encuentra los dos primeros elementos adyacentes que son iguales (o satisfacen un predicado dado)
(objeto función de algoritmo) |
|
devuelve el número de elementos que cumplen criterios específicos
(plantilla de función) |
|
|
(C++20)
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
|
encuentra la primera posición donde dos rangos difieren
(objeto función de algoritmo) |
|
determina si dos conjuntos de elementos son iguales
(function template) |
|
|
(C++20)
|
determina si dos conjuntos de elementos son iguales
(objeto función de algoritmo) |
|
busca la primera ocurrencia de un rango de elementos
(function template) |
|
|
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
|
busca la primera ocurrencia de un número de copias consecutivas de un elemento en un rango
(objeto función de algoritmo) |
|
(C++23)
|
comprueba si un rango comienza con otro rango
(objeto función de algoritmo) |
|
(C++23)
|
verifica si un rango termina con otro rango
(objeto función de algoritmo) |
Operaciones de plegado (desde C++23)
|
Definido en el encabezado
<algorithm>
|
|
|
(C++23)
|
pliega hacia la izquierda un rango de elementos
(objeto función de algoritmo) |
|
(C++23)
|
pliega hacia la izquierda un rango de elementos usando el primer elemento como valor inicial
(objeto función de algoritmo) |
|
(C++23)
|
pliega hacia la derecha un rango de elementos
(objeto función de algoritmo) |
|
(C++23)
|
pliega hacia la derecha un rango de elementos usando el último elemento como valor inicial
(objeto función de algoritmo) |
|
(C++23)
|
pliega hacia la izquierda un rango de elementos, y retorna un
pair
(iterador, valor)
(objeto función de 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 de algoritmo) |
|
Operaciones de modificación de secuencias
Operaciones de copia
|
Definido en el encabezado
<algorithm>
|
|
|
(C++11)
|
copia un rango de elementos a una nueva ubicación
(plantilla de función) |
|
(C++20)
(C++20)
|
copia un rango de elementos a una nueva ubicación
(objeto función de algoritmo) |
|
(C++11)
|
copia un número de elementos a una nueva ubicación
(plantilla de función) |
|
(C++20)
|
copia un número de elementos a una nueva ubicación
(objeto función de algoritmo) |
|
copia un rango de elementos en orden inverso
(plantilla de función) |
|
|
(C++20)
|
copia un rango de elementos en orden inverso
(objeto función de algoritmo) |
|
(C++11)
|
mueve un rango de elementos a una nueva ubicación
(plantilla de función) |
|
(C++20)
|
mueve un rango de elementos a una nueva ubicación
(objeto función de algoritmo) |
|
(C++11)
|
mueve un rango de elementos a una nueva ubicación en orden inverso
(plantilla de función) |
|
(C++20)
|
mueve un rango de elementos a una nueva ubicación en orden inverso
(objeto función de algoritmo) |
Operaciones de intercambio
|
Definido en el encabezado
<string_view>
|
|
|
intercambia los valores de dos objetos
(plantilla de función) |
|
|
Definido en el encabezado
<algorithm>
|
|
|
intercambia dos rangos de elementos
(plantilla de función) |
|
|
(C++20)
|
intercambia dos rangos de elementos
(objeto función de algoritmo) |
|
intercambia los elementos apuntados por dos iteradores
(plantilla de función) |
|
Operaciones de transformación
|
Definido en el encabezado
<algorithm>
|
|
|
aplica una función a un rango de elementos, almacenando resultados en un rango destino
(plantilla de función) |
|
|
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
(C++20)
|
copia un rango, reemplazando elementos que cumplen criterios específicos con otro valor
(objeto función de algoritmo) |
Operaciones de generación
|
Definido en el encabezado
<algorithm>
|
|
|
asigna por copia el valor dado a cada elemento en un rango
(plantilla de función) |
|
|
(C++20)
|
asigna un valor a un rango de elementos
(objeto función de algoritmo) |
|
asigna por copia el valor dado a N elementos en un rango
(plantilla de función) |
|
|
(C++20)
|
asigna un valor a un número de elementos
(objeto función de algoritmo) |
|
asigna los resultados de llamadas sucesivas de función a cada elemento en un rango
(plantilla de función) |
|
|
(C++20)
|
guarda el resultado de una función en un rango
(objeto función de algoritmo) |
|
asigna los resultados de llamadas sucesivas de función a N elementos en un rango
(plantilla de función) |
|
|
(C++20)
|
guarda el resultado de N aplicaciones de una función
(objeto función de algoritmo) |
Operaciones de eliminación
|
Definido en el encabezado
<algorithm>
|
|
|
elimina elementos que cumplen criterios específicos
(plantilla de función) |
|
|
(C++20)
(C++20)
|
elimina elementos que cumplen criterios específicos
(objeto función de algoritmo) |
|
copia un rango de elementos omitiendo aquellos que cumplen criterios específicos
(plantilla de función) |
|
|
(C++20)
(C++20)
|
copia un rango de elementos omitiendo aquellos que cumplen criterios específicos
(objeto función de algoritmo) |
|
elimina elementos duplicados consecutivos en un rango
(plantilla de función) |
|
|
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
|
crea una copia de algún rango de elementos que no contiene duplicados consecutivos
(objeto función de algoritmo) |
Operaciones de modificación de orden
|
Definido en el encabezado
<algorithm>
|
|
|
invierte el orden de los elementos en un rango
(plantilla de función) |
|
|
(C++20)
|
invierte el orden de los elementos en un rango
(objeto función de algoritmo) |
|
crea una copia de un rango que está invertido
(plantilla de función) |
|
|
(C++20)
|
crea una copia de un rango que está invertido
(objeto función de algoritmo) |
|
rota el orden de los elementos en un rango
(plantilla de función) |
|
|
(C++20)
|
rota el orden de los elementos en un rango
(objeto función de algoritmo) |
|
copia y rota un rango de elementos
(plantilla de función) |
|
|
(C++20)
|
copia y rota un rango de elementos
(objeto función de algoritmo) |
|
(C++20)
|
desplaza elementos en un rango
(plantilla de función) |
|
desplaza elementos en un rango
(objeto función de algoritmo) |
|
|
(until C++17)
(C++11)
|
reordena aleatoriamente elementos en un rango
(plantilla de función) |
|
(C++20)
|
reordena aleatoriamente elementos en un rango
(objeto función de algoritmo) |
Operaciones de muestreo
|
Definido en el encabezado
<algorithm>
|
|
|
(C++17)
|
selecciona N elementos aleatorios de una secuencia
(plantilla de función) |
|
(C++20)
|
selecciona N elementos aleatorios de una secuencia
(objeto función de algoritmo) |
Requisitos
Algunos algoritmos requieren que la secuencia representada por los argumentos esté "ordenada" o "particionada". El comportamiento es indefinido si no se cumple el requisito.
|
Una secuencia está ordenada con respecto a un comparador comp si para cada iterador iter que apunta a la secuencia y cada entero no negativo n tal que iter + n [1] es un iterador válido que apunta a un elemento de la secuencia, comp ( * ( iter + n ) , * iter ) == false [1] . |
(hasta C++20) |
|
Una secuencia está
ordenada con respecto a
comp
y
proj
para un comparador
comp
y proyección
proj
si para cada iterador
iter
que apunta a la secuencia y cada entero no negativo
n
tal que
iter
+
n
[1]
es un iterador válido que apunta a un elemento de la secuencia,
bool
(
std::
invoke
(
comp,
std::
invoke
(
proj,
*
(
iter
+
n
)
)
,
Una secuencia está ordenada con respecto a un comparador comp si la secuencia está ordenada con respecto a comp y std:: identity { } (la proyección identidad). |
(desde C++20) |
Una secuencia
[
start
,
finish
)
está
particionada con respecto a una expresión
f
(
e
)
si existe un entero
n
tal que para todo
i
en
[
0
,
std::
distance
(
start, finish
)
)
,
f
(
*
(
start
+
i
)
)
[1]
es
true
si y solo si
i
<
n
.
- ↑ 1.0 1.1 1.2 1.3 1.4 iter + n simplemente significa "el resultado de iter siendo incrementado n veces", independientemente de si iter es un iterador de acceso aleatorio.
Operaciones de particionado
|
Definido en el encabezado
<algorithm>
|
|
|
(C++11)
|
determina si el rango está particionado por el predicado dado
(plantilla de función) |
|
(C++20)
|
determina si el rango está particionado por el predicado dado
(objeto función de algoritmo) |
|
divide un rango de elementos en dos grupos
(plantilla de función) |
|
|
(C++20)
|
divide un rango de elementos en dos grupos
(objeto función de algoritmo) |
|
(C++11)
|
copia un rango dividiendo los elementos en dos grupos
(plantilla de función) |
|
(C++20)
|
copia un rango dividiendo los elementos en dos grupos
(objeto función de algoritmo) |
|
divide elementos en dos grupos preservando su orden relativo
(plantilla de función) |
|
|
(C++20)
|
divide elementos en dos grupos preservando su orden relativo
(objeto función de algoritmo) |
|
(C++11)
|
localiza el punto de partición de un rango particionado
(plantilla de función) |
|
(C++20)
|
localiza el punto de partición de un rango particionado
(objeto función de algoritmo) |
Operaciones de ordenamiento
|
Definido en el encabezado
<algorithm>
|
|
|
ordena un rango en orden ascendente
(plantilla de función) |
|
|
(C++20)
|
ordena un rango en orden ascendente
(objeto función de algoritmo) |
|
ordena un rango de elementos preservando el orden entre elementos iguales
(plantilla de función) |
|
|
(C++20)
|
ordena un rango de elementos preservando el orden entre elementos iguales
(objeto función de algoritmo) |
|
ordena los primeros N elementos de un rango
(plantilla de función) |
|
|
(C++20)
|
ordena los primeros N elementos de un rango
(objeto función de algoritmo) |
|
copia y ordena parcialmente un rango de elementos
(plantilla de función) |
|
|
(C++20)
|
copia y ordena parcialmente un rango de elementos
(objeto función de algoritmo) |
|
(C++11)
|
comprueba si un rango está ordenado en orden ascendente
(plantilla de función) |
|
(C++20)
|
comprueba si un rango está ordenado en orden ascendente
(objeto función de algoritmo) |
|
(C++11)
|
encuentra el subrango ordenado más grande
(plantilla de función) |
|
(C++20)
|
encuentra el subrango ordenado más grande
(objeto función de algoritmo) |
|
ordena parcialmente el rango dado asegurando que está particionado por el elemento dado
(plantilla de función) |
|
|
(C++20)
|
ordena parcialmente el rango dado asegurando que está particionado por el elemento dado
(objeto función de algoritmo) |
Operaciones de búsqueda binaria (en rangos particionados)
|
Definido en el encabezado
<algorithm>
|
|
|
devuelve un iterador al primer elemento
no menor
que el valor dado
(plantilla de función) |
|
|
(C++20)
|
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
(plantilla de función) |
|
|
(C++20)
|
devuelve un iterador al primer elemento
mayor
que cierto valor
(objeto función de algoritmo) |
|
devuelve el rango de elementos que coinciden con una clave específica
(plantilla de función) |
|
|
(C++20)
|
devuelve el rango de elementos que coinciden con una clave específica
(objeto función de algoritmo) |
|
determina si un elemento existe en un rango parcialmente ordenado
(plantilla de función) |
|
|
(C++20)
|
determina si un elemento existe en un rango parcialmente ordenado
(objeto función de algoritmo) |
Operaciones de conjuntos (en rangos ordenados)
|
Definido en el encabezado
<algorithm>
|
|
|
devuelve
true
si una secuencia es subsecuencia de otra
(plantilla de función) |
|
|
(C++20)
|
devuelve
true
si una secuencia es subsecuencia de otra
(objeto función de algoritmo) |
|
calcula la unión de dos conjuntos
(plantilla de función) |
|
|
(C++20)
|
calcula la unión de dos conjuntos
(objeto función de algoritmo) |
|
calcula la intersección de dos conjuntos
(plantilla de función) |
|
|
(C++20)
|
calcula la intersección de dos conjuntos
(objeto función de algoritmo) |
|
calcula la diferencia entre dos conjuntos
(plantilla de función) |
|
|
(C++20)
|
calcula la diferencia entre dos conjuntos
(objeto función de algoritmo) |
|
calcula la diferencia simétrica entre dos conjuntos
(plantilla de función) |
|
|
(C++20)
|
calcula la diferencia simétrica entre dos conjuntos
(objeto función de algoritmo) |
Operaciones de fusión (en rangos ordenados)
|
Definido en el encabezado
<algorithm>
|
|
|
combina dos rangos ordenados
(plantilla de función) |
|
|
(C++20)
|
combina dos rangos ordenados
(objeto función de algoritmo) |
|
combina dos rangos ordenados in situ
(plantilla de función) |
|
|
(C++20)
|
combina dos rangos ordenados in situ
(objeto función de algoritmo) |
Operaciones de heap
|
Un rango de acceso aleatorio
range
|
(hasta C++20) |
|
Un rango de acceso aleatorio
range
Un rango de acceso aleatorio
range
|
(desde C++20) |
Un heap puede ser creado mediante std::make_heap y ranges::make_heap (desde C++20) .
Para más propiedades del heap, consulte max heap .
|
Definido en el encabezado
<algorithm>
|
|
|
agrega un elemento a un max heap
(plantilla de función) |
|
|
(C++20)
|
agrega un elemento a un max heap
(objeto función de algoritmo) |
|
elimina el elemento más grande de un max heap
(plantilla de función) |
|
|
(C++20)
|
elimina el elemento más grande de un max heap
(objeto función de algoritmo) |
|
crea un max heap a partir de un rango de elementos
(plantilla de función) |
|
|
(C++20)
|
crea un max heap a partir de un rango de elementos
(objeto función de algoritmo) |
|
convierte un max heap en un rango de elementos ordenados en orden ascendente
(plantilla de función) |
|
|
(C++20)
|
convierte un max heap en un rango de elementos ordenados en orden ascendente
(objeto función de algoritmo) |
|
(C++11)
|
verifica si el rango dado es un max heap
(plantilla de función) |
|
(C++20)
|
verifica si el rango dado es un max heap
(objeto función de algoritmo) |
|
(C++11)
|
encuentra el subrango más grande que es un max heap
(plantilla de función) |
|
(C++20)
|
encuentra el subrango más grande que es un max heap
(objeto función de algoritmo) |
Operaciones de mínimo/máximo
|
Definido en el encabezado
<algorithm>
|
|
|
devuelve el mayor de los valores dados
(plantilla de función) |
|
|
(C++20)
|
devuelve el mayor de los valores dados
(objeto función de algoritmo) |
|
devuelve el elemento más grande en un rango
(plantilla de función) |
|
|
(C++20)
|
devuelve el elemento más grande en un rango
(objeto función de algoritmo) |
|
devuelve el menor de los valores dados
(plantilla de función) |
|
|
(C++20)
|
devuelve el menor de los valores dados
(objeto función de algoritmo) |
|
devuelve el elemento más pequeño en un rango
(plantilla de función) |
|
|
(C++20)
|
devuelve el elemento más pequeño en un rango
(objeto función de algoritmo) |
|
(C++11)
|
devuelve el menor y el mayor de dos elementos
(plantilla de función) |
|
(C++20)
|
devuelve el menor y el mayor de dos elementos
(objeto función de algoritmo) |
|
(C++11)
|
devuelve los elementos más pequeño y más grande en un rango
(plantilla de función) |
|
(C++20)
|
devuelve los elementos más pequeño y más grande en un rango
(objeto función de algoritmo) |
|
(C++17)
|
limita un valor entre un par de valores límite
(plantilla de función) |
|
(C++20)
|
limita un valor entre un par de valores límite
(objeto función de algoritmo) |
Operaciones de comparación lexicográfica
|
Definido en el encabezado
<algorithm>
|
|
|
devuelve
true
si un rango es lexicográficamente menor que otro
(plantilla de función) |
|
|
(C++20)
|
devuelve
true
si un rango es lexicográficamente menor que otro
(objeto función de algoritmo) |
|
compara dos rangos usando comparación de tres vías
(plantilla de función) |
|
Operaciones de permutación
|
Definido en el encabezado
<algorithm>
|
|
|
genera la siguiente permutación lexicográfica mayor de un rango de elementos
(plantilla de función) |
|
|
(C++20)
|
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 menor de un rango de elementos
(plantilla de función) |
|
|
(C++20)
|
genera la siguiente permutación lexicográfica menor de un rango de elementos
(objeto función de algoritmo) |
|
(C++11)
|
determina si una secuencia es una permutación de otra secuencia
(plantilla de función) |
|
(C++20)
|
determina si una secuencia es una permutación de otra secuencia
(objeto función de algoritmo) |
Operaciones numéricas
|
Definido en el encabezado
<numeric>
|
|
|
(C++11)
|
llena un rango con incrementos sucesivos del valor inicial
(plantilla de función) |
|
(C++23)
|
llena un rango con incrementos sucesivos del valor inicial
(objeto función de algoritmo) |
|
suma o pliega un rango de elementos
(plantilla de función) |
|
|
calcula el producto interno de dos rangos de elementos
(plantilla de función) |
|
|
calcula las diferencias entre elementos adyacentes en un rango
(plantilla de función) |
|
|
calcula la suma parcial de un rango de elementos
(plantilla de función) |
|
|
(C++17)
|
similar a
std::accumulate
, excepto fuera de orden
(plantilla de función) |
|
(C++17)
|
similar a
std::partial_sum
, excluye el elemento de entrada
i
ésimo
de la suma
i
ésima
(plantilla de función) |
|
(C++17)
|
similar a
std::partial_sum
, incluye el elemento de entrada
i
ésimo
en la suma
i
ésima
(plantilla de función) |
|
(C++17)
|
aplica un invocable, luego reduce fuera de orden
(plantilla de función) |
|
(C++17)
|
aplica un invocable, luego calcula el escaneo exclusivo
(plantilla de función) |
|
(C++17)
|
aplica un invocable, luego calcula el escaneo inclusivo
(plantilla de función) |
Operaciones sobre memoria no inicializada
|
Definido en el encabezado
<memory>
|
|
|
copia un rango de objetos a un área de memoria no inicializada
(plantilla de función) |
|
|
(C++20)
|
copia un rango de objetos a un área de memoria no inicializada
(objeto función de algoritmo) |
|
(C++11)
|
copia un número de objetos a un área de memoria no inicializada
(plantilla de función) |
|
(C++20)
|
copia un número de objetos a un área de memoria no inicializada
(objeto función de algoritmo) |
|
copia un objeto a un área de memoria no inicializada, definida por un rango
(plantilla de función) |
|
|
(C++20)
|
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 conteo
(plantilla de función) |
|
|
(C++20)
|
copia un objeto a un área de memoria no inicializada, definida por un inicio y un contador
(objeto función de algoritmo) |
|
(C++17)
|
mueve un rango de objetos a un área de memoria no inicializada
(plantilla de función) |
|
(C++20)
|
mueve un rango de objetos a un área de memoria no inicializada
(objeto función algoritmo) |
|
(C++17)
|
mueve una cantidad de objetos a un área de memoria no inicializada
(plantilla de función) |
|
(C++20)
|
mueve una cantidad de objetos a un área de memoria no inicializada
(objeto función algoritmo) |
|
(C++17)
|
construye objetos mediante
default-initialization
en un área de memoria no inicializada, definida por un rango
(plantilla de función) |
|
construye objetos mediante
default-initialization
en un área de memoria no inicializada, definida por un rango
(objeto función algoritmo) |
|
|
construye objetos mediante
default-initialization
en un área de memoria no inicializada, definida por un inicio y un contador
(plantilla de función) |
|
|
construye objetos mediante
inicialización por defecto
en un área de memoria no inicializada, definida por un inicio y un contador
(objeto función algoritmo) |
|
|
(C++17)
|
construye objetos mediante
value-initialization
en un área de memoria no inicializada, definida por un rango
(plantilla de función) |
|
construye objetos mediante
value-initialization
en un área de memoria no inicializada, definida por un rango
(objeto función algoritmo) |
|
|
(C++17)
|
construye objetos mediante
value-initialization
en un área de memoria no inicializada, definida por un inicio y un contador
(plantilla de función) |
|
construye objetos mediante
value-initialization
en un área de memoria no inicializada, definida por un inicio y un conteo
(objeto función algoritmo) |
|
|
(C++17)
|
destruye un rango de objetos
(plantilla de función) |
|
(C++20)
|
destruye un rango de objetos
(objeto función de algoritmo) |
|
(C++17)
|
destruye una cantidad de objetos en un rango
(plantilla de función) |
|
(C++20)
|
destruye una cantidad de objetos en un rango
(objeto función de algoritmo) |
|
(C++17)
|
destruye un objeto en una dirección dada
(plantilla de función) |
|
(C++20)
|
destruye un objeto en una dirección dada
(objeto función de algoritmo) |
|
(C++20)
|
crea un objeto en una dirección determinada
(plantilla de función) |
|
(C++20)
|
crea un objeto en una dirección determinada
(objeto función de algoritmo) |
Generación de números aleatorios (since C++26)
|
Definido en el encabezado
<random>
|
|
|
(C++26)
|
llena un rango con números aleatorios de un generador uniforme de bits aleatorios
(objeto función de algoritmo) |
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_algorithm_iterator_requirements
|
202207L
|
(C++23) | Iteradores de rangos como entradas a algoritmos no-Ranges |
__cpp_lib_clamp
|
201603L
|
(C++17) | std::clamp |
__cpp_lib_constexpr_algorithms
|
201806L
|
(C++20) | Constexpr para algoritmos |
202306L
|
(C++26) | Ordenación estable constexpr | |
__cpp_lib_algorithm_default_value_type
|
202403L
|
(C++26) | Inicialización de lista para algoritmos |
__cpp_lib_freestanding_algorithm
|
202311L
|
(C++26) | Facilidades independientes en <algorithm> |
__cpp_lib_robust_nonmodifying_seq_ops
|
201304L
|
(C++14) | Hacer operaciones de secuencia no modificadoras más robustas (sobrecargas de dos rangos para std::mismatch , std::equal y std::is_permutation) |
__cpp_lib_sample
|
201603L
|
(C++17) | std::sample |
__cpp_lib_shift
|
201806L
|
(C++20) | std::shift_left y std::shift_right |
Biblioteca C
|
Definido en el encabezado
<cstdlib>
|
|
|
ordena un rango de elementos con tipo no especificado
(función) |
|
|
busca un elemento de tipo no especificado en un array
(función) |
|
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 193 | C++98 | el heap requería que * first fuera el elemento más grande |
puede haber elementos
iguales a * first |
| LWG 2150 | C++98 | la definición de secuencia ordenada era incorrecta | corregida |
| LWG 2166 | C++98 |
el requisito de heap no coincidía lo suficiente
con la definición de max heap |
requisito mejorado |
Véase también
|
Documentación de C
para
Algoritmos
|