<algorithm>
Define las funciones de plantilla contenedor de la biblioteca estándar de C++ que realizan algoritmos.
Sintaxis
(see links below for specific algorithm syntax)
Nota:
La biblioteca <algorithm>
también usa la instrucción #include <initializer_list>
.
Comentarios
Los algoritmos de la biblioteca estándar de C++ pueden funcionar en varias estructuras de datos. Las estructuras de datos en las que pueden operar incluyen no solo las clases de contenedor de la biblioteca estándar de C++, como vector
y list
, sino también estructuras de datos definidas por el usuario y matrices de elementos, siempre y cuando cumplan los requisitos de un algoritmo determinado. Los algoritmos de la biblioteca estándar de C++ logran este nivel de generalidad al acceder a los elementos de un contenedor indirectamente mediante iteradores y al recorrerlos.
Los algoritmos de la biblioteca estándar de C++ procesan los intervalos de iteradores que se suelen especificar por sus posiciones inicial o final. Los intervalos a los que se hace referencia deben ser válidos en el sentido de que todos los iteradores de los intervalos deben ser desreferenciables y, dentro de las secuencias de cada intervalo, la última posición debe ser accesible desde la primera incrementando el iterador.
A partir de C++20, la mayoría de los algoritmos definidos en <algorithm>
también están disponibles en un formulario que toma .range
Por ejemplo, en lugar de llamar a sort(v1.begin(), v1.end(), greater<int>());
, puede llamar a . ranges::sort(v1, greater<int>());
Los algoritmos de la biblioteca estándar de C++ pueden funcionar con diferentes tipos de objetos de contenedor al mismo tiempo. Se han usado dos sufijos para transmitir información sobre el propósito de los algoritmos:
El
_if
sufijo indica que el algoritmo se usa con objetos de función que operan en los valores de los elementos en lugar de en los propios elementos. Por ejemplo, elfind_if
algoritmo busca elementos cuyos valores cumplen el criterio especificado por un objeto de función, mientras que elfind
algoritmo busca un valor determinado.El
_copy
sufijo indica que el algoritmo modifica generalmente los valores copiados en lugar de copiar valores modificados. En otras palabras, no modifican los elementos del intervalo de origen, sino que colocan los resultados en un intervalo o iterador de salida. Por ejemplo, elreverse
algoritmo invierte el orden de los elementos dentro de un intervalo, mientras que elreverse_copy
algoritmo copia el resultado invertido en un intervalo de destino.
Los algoritmos de la biblioteca estándar de C++ a menudo se clasifican en grupos para indicar su propósito o requisitos. Estos incluyen la modificación de algoritmos que cambian el valor de los elementos en comparación con los algoritmos que no modifican. Los algoritmos de mutación cambian el orden de los elementos, pero no los valores de sus elementos. Los algoritmos de eliminación pueden eliminar elementos de un intervalo o de una copia de un intervalo. Los algoritmos de ordenación reordenan los elementos de un intervalo de varias maneras y los algoritmos de intervalo ordenado solo actúan sobre los intervalos cuyos elementos se han ordenado de una manera determinada.
Los algoritmos numéricos de la biblioteca estándar de C++ que se proporcionan para el procesamiento numérico tienen su propio archivo <numeric>
de encabezado y los objetos de función y los adaptadores se definen en el encabezado <functional>
. Los objetos de función que devuelven valores booleanos se conocen como predicados. El predicado binario predeterminado es el operator<
de comparación. En general, los elementos que se ordenan deben ser menores que comparables para que, dadas dos elementos, se pueda determinar que son equivalentes (en el sentido de que ninguno es menor que el otro) o que uno es menor que el otro. Esto produce una ordenación entre los elementos no equivalentes.
Algoritmos
Nombre | Descripción |
---|---|
adjacent_find |
Busca dos elementos adyacentes que son iguales o cumplen una condición especificada. |
all_of |
Devuelve true cuando una condición está presente en todos los elementos del intervalo especificado. |
any_of |
Devuelve true cuando una condición está presente al menos una vez en el intervalo especificado de elementos. |
binary_search |
Comprueba si hay un elemento en un intervalo ordenado que sea igual a un valor especificado o equivalente a este del modo especificado por un predicado binario. |
clamp |
|
copy |
Asigna los valores de elementos de un intervalo de origen a un intervalo de destino, recorriendo en iteración la secuencia de origen de elementos y asignándoles nuevas posiciones en una dirección hacia delante. |
copy_backward |
Asigna los valores de elementos de un intervalo de origen a un intervalo de destino, recorriendo en iteración la secuencia de origen de elementos y asignándoles nuevas posiciones en una dirección hacia atrás. |
copy_if |
Copia todos los elementos de un intervalo especificado que comprueban true para una condición especificada |
copy_n |
Copia un número especificado de elementos. |
count |
Devuelve el número de elementos de un intervalo cuyos valores coinciden con un valor especificado. |
count_if |
Devuelve el número de elementos de un intervalo cuyos valores coinciden con una condición especificada. |
equal |
Compara dos intervalos elemento a elemento para ver si son iguales o equivalentes según lo especificado por un predicado binario. |
equal_range |
Busca un par de posiciones en un intervalo ordenado; la primera es menor o equivalente a la posición de un elemento especificado y la segunda es mayor que la posición del elemento, donde el sentido de equivalencia o de ordenación empleado para establecer las posiciones en la secuencia se puede especificar con un predicado binario. |
fill |
Asigna el mismo valor nuevo a cada elemento de un intervalo especificado. |
fill_n |
Asigna un nuevo valor a un número especificado de elementos en un intervalo que comienza con un elemento determinado. |
find |
Busca la posición de la primera aparición de un elemento en un intervalo que tiene un valor especificado. |
find_end |
Busca en un intervalo la última subsecuencia que es idéntica a una secuencia especificada o que es equivalente según lo especificado por un predicado binario. |
find_first_of |
Busca la primera aparición de cualquiera de varios valores dentro de un intervalo de destino o la primera aparición de cualquiera de varios elementos que son equivalentes según lo especificado por un predicado binario en un conjunto especificado de los elementos. |
find_if |
Busca la posición de la primera aparición de un elemento en un intervalo que cumple una condición especificada. |
find_if_not |
Devuelve el primer elemento del intervalo indicado que no satisface una condición. |
for_each |
Aplica un objeto de función especificado a cada elemento en un orden hacia delante dentro de un intervalo y devuelve el objeto de función. |
for_each_n |
|
generate |
Asigna los valores generados por un objeto de función a cada elemento de un intervalo. |
generate_n |
Asigna los valores generados por un objeto de función a un número especificado de elementos de un intervalo y vuelve a la posición situada una más allá del último valor asignado. |
includes |
Prueba si un intervalo ordenado contiene todos los elementos incluidos en un segundo intervalo ordenado, donde el criterio de ordenación o equivalencia entre los elementos se pueden especificar mediante un predicado binario. |
inplace_merge |
Combina los elementos de dos intervalos ordenados consecutivos en un único intervalo ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
is_heap |
Devuelve true si los elementos del intervalo especificado forman un montón. |
is_heap_until |
Devuelve true si el intervalo especificado forma un montón hasta el último elemento. |
is_partitioned |
Devuelve true si todos los elementos del intervalo especificado que prueban si una condición es true aparecen antes que cualquier elemento que prueba si es false . |
is_permutation |
Determina si los elementos de un intervalo determinado forman una permutación válida. |
is_sorted |
Devuelve true si los elementos del intervalo especificado están ordenados. |
is_sorted_until |
Devuelve true si los elementos del intervalo especificado están ordenados. |
iter_swap |
Intercambia dos valores a los que se hace referencia mediante un par de iteradores especificados. |
lexicographical_compare |
Compara dos secuencias elemento a elemento para determinar cuál es menor de los dos. |
lower_bound |
Busca la posición del primer elemento en un intervalo ordenado que tiene un valor mayor o equivalente a un valor especificado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
make_heap |
Convierte elementos de un intervalo especificado en un montón en el que el primer elemento es el mayor y para el que se puede especificar un criterio de ordenación con un predicado binario. |
max |
Compara dos objetos y devuelve el mayor de los dos, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
max_element |
Busca la primera aparición del elemento mayor en un intervalo especificado donde el criterio de ordenación se puede especificar mediante un predicado binario. |
merge |
Combina todos los elementos de dos intervalos de origen ordenados en un único intervalo de destino ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
min |
Compara dos objetos y devuelve el menor de los dos, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
min_element |
Busca la primera aparición del menor elemento en un intervalo especificado donde el criterio de ordenación se puede especificar mediante un predicado binario. |
minmax |
Compara dos parámetros de entrada y los devuelve como un par, en orden de menor a mayor. |
minmax_element |
Realiza el trabajo efectuado por min_element y max_element en una llamada. |
mismatch |
Compara dos intervalos elemento a elemento para ver si son iguales o equivalentes según lo especificado por un predicado binario y busca la primera posición donde se produce una diferencia. |
<alg> move |
Mueve los elementos asociados a un intervalo especificado. |
move_backward |
Mover los elementos de un iterador a otro. El movimiento comienza con el último elemento de un intervalo especificado y termina con el primer elemento de ese intervalo. |
next_permutation |
Reorganiza los elementos de un intervalo de modo que la ordenación original se reemplaza con la mayor permutación lexicográficamente siguiente si existe, donde el sentido de siguiente se puede especificar con un predicado binario. |
none_of |
Devuelve true cuando una condición nunca está presente entre los elementos del intervalo especificado. |
nth_element |
Divide un intervalo de elementos, situando correctamente el elemento enésimo de la secuencia en el intervalo de modo que todos los elementos que hay delante sean menores o iguales que él y todos los que lo siguen en la secuencia sean mayores o iguales que él. |
partial_sort |
Organiza un número especificado de los elementos menores de un intervalo en un orden no descendente, o de acuerdo con un criterio de ordenación especificado por un predicado binario. |
partial_sort_copy |
Copia los elementos de un intervalo de origen a un intervalo de destino donde los elementos de origen están ordenados por menor que u otro predicado binario especificado. |
partition |
Clasifica los elementos de un intervalo en dos conjuntos disjuntos, donde los elementos que satisfacen un predicado unario preceden a los que no lo satisfacen. |
partition_copy |
Copia a un destino los elementos para los que una condición es true y a otro destino diferente los elementos para los que la condición es false . Los elementos deben proceder de un intervalo especificado. |
partition_point |
Devuelve el primer elemento del intervalo determinado que no satisface la condición. Los elementos se ordenan para que los que cumplan la condición vengan antes de los que no lo hacen. |
pop_heap |
Quita el elemento mayor del principio de un montón hasta la penúltima posición del intervalo y después forma un nuevo montón con los elementos restantes. |
prev_permutation |
Reorganiza los elementos de un intervalo de modo que la ordenación original se reemplaza con la mayor permutación lexicográficamente siguiente si existe, donde el sentido de siguiente se puede especificar con un predicado binario. |
push_heap |
Agrega un elemento que está al final de un intervalo a un montón existente que se compone de los elementos anteriores del intervalo. |
random_shuffle |
Reorganiza una secuencia de N elementos de un intervalo en una de N! organizaciones posibles seleccionadas aleatoriamente. |
remove |
Elimina un valor especificado de un intervalo determinado sin alterar el orden de los elementos restantes y devolver el final de un nuevo intervalo libre del valor especificado. |
remove_copy |
Copia elementos de un intervalo de origen a un intervalo de destino, excepto que los elementos de un valor especificado no se copian, sin alterar el orden de los elementos restantes y devolver el final de un nuevo intervalo de destino. |
remove_copy_if |
Copia elementos de un intervalo de origen a un intervalo de destino, salvo que no se copian los predicados que satisfacen un predicado, sin alterar el orden de los elementos restantes y devolver el final de un nuevo intervalo de destino. |
remove_if |
Elimina los elementos que cumplen un predicado de un intervalo determinado sin alterar el orden de los elementos restantes y devolver el final de un nuevo intervalo libre del valor especificado. |
replace |
Examina cada elemento de un intervalo y lo reemplaza si coincide con un valor especificado. |
replace_copy |
Examina cada elemento de un intervalo de origen y lo reemplaza si coincide con un valor especificado y copia el resultado a un nuevo intervalo de destino. |
replace_copy_if |
Examina cada elemento de un intervalo de origen y lo reemplaza si satisface un predicado especificado y copia el resultado a un nuevo intervalo de destino. |
replace_if |
Examina cada elemento de un intervalo y lo reemplaza si satisface un predicado especificado. |
reverse |
Invierte el orden de los elementos dentro de un intervalo. |
reverse_copy |
Invierte el orden de los elementos dentro de un intervalo de origen mientras los copia a un intervalo de destino |
rotate |
Intercambia los elementos de dos intervalos adyacentes. |
rotate_copy |
Intercambia los elementos de dos intervalos adyacentes dentro de un intervalo de origen y copia el resultado a un intervalo de destino. |
sample |
|
search |
Busca la primera aparición de una secuencia dentro de un intervalo de destino cuyos elementos son iguales que los de una secuencia determinada de elementos o cuyos elementos son equivalentes según lo especificado por un predicado binario a los elementos de la secuencia especificada. |
search_n |
Busca la primera subsecuencia de un intervalo en la que un número especificado de elementos tienen un valor determinado o una relación con ese valor según lo especificado por un predicado binario. |
set_difference |
Agrupa todos los elementos que pertenecen a un intervalo de origen ordenado, pero no a un segundo intervalo de origen ordenado, en un único intervalo de destino ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
set_intersection |
Agrupa todos los elementos que pertenecen a ambos intervalos de origen ordenados en un único intervalo de destino ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
set_symmetric_difference |
Agrupa todos los elementos que pertenecen a uno, pero no a ambos, de los intervalos de origen ordenados en un único intervalo de destino ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
set_union |
Agrupa todos los elementos que pertenecen al menos a uno de los dos intervalos de origen ordenados en un único intervalo de destino ordenado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
sort |
Organiza los elementos de un intervalo especificado en un orden no descendente o de acuerdo con un criterio de ordenación especificado por un predicado binario. |
shuffle |
Ordena aleatoriamente (reordena) elementos de un rango determinado usando un generador de números aleatorios. |
sort_heap |
Convierte un montón en un intervalo ordenado. |
stable_partition |
Clasifica los elementos de un intervalo en dos conjuntos disjuntos, donde los elementos que satisfacen un predicado unario preceden a los que no lo satisfacen, conservando el orden relativo de los elementos equivalentes. |
stable_sort |
Organiza los elementos de un intervalo especificado en un orden no descendente o de acuerdo con un criterio de ordenación especificado por un predicado binario y conserva el orden relativo de los elementos equivalentes. |
swap |
Intercambia los valores de los elementos entre dos tipos de objetos, asignando el contenido del primer objeto al segundo objeto y el contenido del segundo al primero. |
swap_ranges |
Intercambia los elementos de un intervalo con los elementos de otro intervalo del mismo tamaño. |
transform |
Aplica un objeto de función especificado a cada elemento de un intervalo de origen o a un par de elementos de dos intervalos de origen y copia los valores devueltos del objeto de función a un intervalo de destino. |
unique |
Quita los elementos duplicados adyacentes entre sí en un intervalo especificado. |
unique_copy |
Copia los elementos de un intervalo de origen a un intervalo de destino salvo los elementos duplicados que son adyacentes entre sí. |
upper_bound |
Busca la posición del primer elemento de un intervalo ordenado que tiene un valor mayor que un valor especificado, donde el criterio de ordenación se puede especificar mediante un predicado binario. |
Consulte también
Referencia de archivos de encabezado
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++