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_ofany_ofnone_ofcountcount_ifcontains
Algoritmos de comparación
Compara dos rangos para una propiedad determinada.
mismatchequallexicographical_comparecontains_subrangestarts_withends_withis_permutation
Algoritmos de búsqueda
Encuentra la primera o la última posición en un rango donde los elementos subsiguientes satisfacen algún predicado.
findfind_iffind_if_notfind_lastfind_last_iffind_last_if_notfind_endfind_first_ofadjacent_findsearchsearch_npartition_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_searchupper_boundlower_boundequal_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_elementmin_elementminmax_element
Algoritmos de verificación de propiedades
Comprueba si un rango completo satisface alguna propiedad.
is_partitionedis_sortedis_heap
Modificación de operaciones de secuencia
Copiar algoritmos
Transfiere los elementos de un rango a otro.
copycopy_ifcopy_backwardmovemove_backwardreverse_copyrotate_copyunique_copysample
Algoritmos de particionamiento
Mueve los elementos de un rango en su lugar de manera que el rango se particione con respecto a alguna propiedad.
uniqueremoveremove_ifpartitionpartition_copystable_partition
Algoritmos de ordenación
Ordena o ordena parcialmente un rango in situ.
sortpartialsortstable_sortnth_element
Algoritmos de población
Rellena un rango determinado sin leer los valores contenidos en él.
fillgenerateiota
Transformación de algoritmos
Transforma cada elemento de un rango dado in situ.
for_eachtransformreplacereplace_ifclamp
Reordenamiento de algoritmos
Cambia el orden de los elementos dentro de un rango sin modificarlos.
shuffleshift_leftshift_rightreverserotate
Algoritmos de montón
Proporciona algoritmos para crear, insertar y eliminar elementos de un montón máximo :
Referencias
- ↑ ISO / IEC (2003). ISO/IEC 14882:2003(E): Lenguajes de programación - C++ §25 Biblioteca de algoritmos [lib.algorithms] párr. 1
- ↑ 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>.
Enlaces externos
- Referencia de C++ para algoritmos estándar
- Biblioteca estándar de C++