Articulo de referencia

Algoritmo (C++)

En la biblioteca estándar de C++ , la biblioteca de algoritmos proporciona varias funciones que realizan operaciones algorítmicas en contenedores y otras secuencias, representad...

En la biblioteca estándar de C++ , la biblioteca de algoritmos proporciona varias funciones que realizan operaciones algorítmicas en contenedores y otras secuencias, representadas por iteradores . [ 1 ]

El estándar C++ proporciona algunos algoritmos estándar recopilados en el <algorithm>encabezado estándar. [ 2 ] Un puñado de algoritmos también se encuentran en el <numeric>encabezado. Todos los algoritmos están en el espacio de nombres . C++20 introduce además el encabezado con el espacio de nombres, para algoritmos sobre un rango .std<ranges>std::ranges

Políticas de ejecución

C++17 ofrece la posibilidad de que muchos algoritmos adopten opcionalmente una política de ejecución, lo que puede permitir que las implementaciones ejecuten el algoritmo en paralelo (es decir, mediante el uso de hilos o instrucciones SIMD ).

Existen cuatro tipos de políticas diferentes, cada una de las cuales indica una semántica distinta sobre el orden en que se permite observar los accesos a los elementos en relación unos con otros.

  • sequenced_policy, lo que indica que la ejecución del algoritmo debe ocurrir en el hilo que invoca la función, y el orden de acceso a los elementos debe ejecutarse en secuencia. Es equivalente a llamar a la función sin una política de ejecución.
  • parallel_policy, lo que indica que la ejecución del algoritmo puede ocurrir en múltiples hilos, sin embargo, dentro de cada hilo el orden de acceso a los elementos se realiza en secuencia (es decir, los accesos a los elementos pueden no realizarse simultáneamente).
  • parallel_unsequenced_policylo que indica que la ejecución del algoritmo puede ocurrir en múltiples hilos y que los accesos a los elementos no tienen que realizarse en orden dentro del mismo hilo.
  • unsequenced_policylo que indica que la ejecución del algoritmo debe ocurrir en el hilo que invoca la función; sin embargo, el orden de acceso a los elementos puede realizarse fuera de secuencia.

Es responsabilidad del usuario asegurarse de que las operaciones realizadas por la función sean seguras para subprocesos cuando se utilizan políticas que pueden ejecutarse en diferentes subprocesos.

Rangos

C++20 añade versiones de los algoritmos definidos en el archivo de cabecera que operan sobre rangos en lugar de pares de iteradores.<algorithm>

Las versiones de rangos de las funciones de algoritmo se encuentran dentro del espacio de nombres. Amplían la funcionalidad de los algoritmos básicos al permitir el uso de pares iterador-centinela en lugar de requerir que ambos iteradores sean del mismo tipo, y también permiten la interoperabilidad con los objetos proporcionados por el encabezado de rangos sin que el usuario tenga que extraer manualmente los iteradores.std::ranges

Operaciones de secuencia no modificativas

Algoritmos de verificación de predicados

Comprueba si un predicado dado se evalúa como verdadero para cierta cantidad de objetos en el rango, o devuelve la cantidad de objetos que no se evalúan como verdaderos.

  • all_of
  • any_of
  • none_of
  • count
  • count_if
  • contains

Algoritmos de comparación

Compara dos rangos para una propiedad determinada.

  • mismatch
  • equal
  • lexicographical_compare
  • contains_subrange
  • starts_with
  • ends_with
  • is_permutation

Algoritmos de búsqueda

Encuentra la primera o la última posición en un rango donde los elementos subsiguientes satisfacen algún predicado.

  • find
  • find_if
  • find_if_not
  • find_last
  • find_last_if
  • find_last_if_not
  • find_end
  • find_first_of
  • adjacent_find
  • search
  • search_n
  • partition_point

Algoritmos de búsqueda binaria

Proporciona operaciones de búsqueda binaria en rangos. Su uso en rangos no ordenados no produce un comportamiento definido .

  • binary_search
  • upper_bound
  • lower_bound
  • equal_range

Algoritmos de búsqueda de máximo/mínimo

Encuentra el elemento máximo o mínimo en un rango, según lo definido por algún predicado de comparación.

  • max_element
  • min_element
  • minmax_element

Algoritmos de verificación de propiedades

Comprueba si un rango completo satisface alguna propiedad.

  • is_partitioned
  • is_sorted
  • is_heap

Modificación de operaciones de secuencia

Copiar algoritmos

Transfiere los elementos de un rango a otro.

  • copy
  • copy_if
  • copy_backward
  • move
  • move_backward
  • reverse_copy
  • rotate_copy
  • unique_copy
  • sample

Algoritmos de particionamiento

Mueve los elementos de un rango en su lugar de manera que el rango se particione con respecto a alguna propiedad.

  • unique
  • remove
  • remove_if
  • partition
  • partition_copy
  • stable_partition

Algoritmos de ordenación

Ordena o ordena parcialmente un rango in situ.

  • sort
  • partialsort
  • stable_sort
  • nth_element

Algoritmos de población

Rellena un rango determinado sin leer los valores contenidos en él.

  • fill
  • generate
  • iota

Transformación de algoritmos

Transforma cada elemento de un rango dado in situ.

  • for_each
  • transform
  • replace
  • replace_if
  • clamp

Reordenamiento de algoritmos

Cambia el orden de los elementos dentro de un rango sin modificarlos.

  • shuffle
  • shift_left
  • shift_right
  • reverse
  • rotate

Algoritmos de montón

Proporciona algoritmos para crear, insertar y eliminar elementos de un montón máximo :

Referencias

  1. ISO / IEC (2003). ISO/IEC 14882:2003(E): Lenguajes de programación - C++ §25 Biblioteca de algoritmos [lib.algorithms] párr. 1
  2. Stroustrup, Bjarne (2009). Programación  : principios y práctica con C++ . Upper Saddle River, NJ: Addison-Wesley. pág.  729. ISBN 9780321543721. Consultado el 22 de marzo de 2012. Los algoritmos de la biblioteca estándar se encuentran en <algorithm>.
  • Referencia de C++ para algoritmos estándar