Compartir a través de


<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, el find_if algoritmo busca elementos cuyos valores cumplen el criterio especificado por un objeto de función, mientras que el find 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, el reverse algoritmo invierte el orden de los elementos dentro de un intervalo, mientras que el reverse_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++