Share via


Algoritmos

Los algoritmos constituyen una parte fundamental de la biblioteca de plantillas estándar.Los algoritmos no funcionan con contenedores propios sino con iteradores.Por consiguiente, el mismo algoritmo se puede utilizar por la mayoría si no todos los contenedores STL.En esta sección se describen las convenciones y la terminología de los algoritmos de STL.

Comentarios

Las descripciones de las funciones de la plantilla de algoritmo emplean varias frases rápida:

  • La frase “en el intervalo [A, B)” significa la secuencia de valores cero o más discreto empezando por hasta pero no incluidos b.Un intervalo solamente es válido si b es accesible A; puede almacenar en una n de objeto (n = A), aumentar el objeto cero o más veces (++N), y hacer que el objeto compare el igual a b después de un número finito de incrementos (== n B).

  • La frase “cada n en el intervalo [A, B)” significa que n comienza con el valor A y se incrementada cero o más veces hasta que equivale a bde valor .B == n case no está en el intervalo.

  • La frase “el valor más bajo de n en el intervalo [A, *B)*como que X” significa que la condición X está determinada para cada n en el intervalo [A, *B)*hasta que se cumpla la condición X .

  • La frase “el valor máximo n del intervalo [A, *B)*como que X significa que X se determina para cada n en el intervalo [A, B).La función almacena en K una copia n cada vez que la condición se cumple X .Si el almacén se produce, la función reemplaza el valor final de n, que equivale a b, con el valor de K.Para un iterador bidireccional o de acceso aleatorio, sin embargo, también puede significar que n comienza con el valor máximo del intervalo y se disminuida sobre el intervalo hasta que se cumpla la condición X .

  • Expresiones como X - La y, donde X e y pueden ser iteradores distinto de iteradores de acceso aleatorio, se piensa en el sentido matemático.La función no evalúa necesariamente el operador- si debe determinar por valor.Lo mismo también se aplica a las expresiones como X + n y X - N, donde es un tipo n entero.

Varios algoritmos hace uso de un predicado que realiza en pares una comparación, por ejemplo con operator==, para producir un resultado de bool .La función **operator==**de predicado, o ningún reemplazo para él, no debe modificar ninguna de sus operandos.Debe producir el mismo resultado de bool cada vez que se evalúa, y debe producir el mismo resultado si una copia de cada operando se sustituye para el operando.

Varios algoritmos hace uso de un predicado que debe imponer orden débil estricta a pares de elementos de una secuencia.para el predicado pr(X, Y):

  • Estricto significa que pr(X, *X)*es false.

  • ¡Débil significa que X e y tienen orden equivalentes si! pr¡(X, AND) &&! pr(Y, X) (la y == de X no debe definirse).

  • El orden significa quepr (X, Y) &&pr (la y, Z) implicapr (X, Z).

Algunos de estos algoritmos utilizan implícitamente la yde predicado X < *.*Otros predicados que satisfacen normalmente el requisito de ordenación parcial estricto son yde X >, menos(X, Y), y greater(X, Y).Observe, sin embargo, que los predicados como yde X <= y yde X >= no satisfacen este requisito.

Una secuencia de elementos devueltos por iteradores en el intervalo [First, Last) es una secuencia ordenada por el operador**<** si, para cada n en el intervalo [0, Last - First) y para cada m en el intervalo (n, Last - elFirst) el predicado! (* (First + M)< * (First + N)) es true.(Observe que los elementos se ordenan en orden ascendente). La función **operator<**de predicado, o ningún reemplazo para él, no debe modificar ninguna de sus operandos.Debe producir el mismo resultado de bool cada vez que se evalúa, y debe producir el mismo resultado si una copia de cada operando se sustituye para el operando.Por otra parte, deben imponer orden débil estricto sobre los operandos que compara.

Una secuencia de elementos devueltos por iteradores en el intervalo [First, Last) es una pila ordenada por operator< si, para cada n en el intervalo [1, Last - elFirst) el predicado! (*First < * (First + N)) es true.(El primer elemento de Z es el mayor). Su estructura interna se conoce de otra manera solo a las funciones make_heap, pop_heap, y push_heapde la plantilla.Como con una secuencia ordenada, la función **operator<**de predicado, o ningún reemplazo para él, no debe modificar ninguna de sus operandos, y debe imponer orden débil estricto sobre los operandos que compara.Debe producir el mismo resultado de bool cada vez que se evalúa, y debe producir el mismo resultado si una copia de cada operando se sustituye para el operando.

Los algoritmos de STL se encuentran en los archivos de encabezado <algorithm> y de <numeric> .

Vea también

Referencia

Biblioteca de plantillas estándar

Seguridad para subprocesos de la biblioteca estándar de C++