Algorithms
Os algoritmos são uma parte fundamental da Standard Template Library.Algoritmos não funcionam com contêineres propriamente ditos, mas em vez disso, com os iteradores.Portanto, o mesmo algoritmo pode ser usado pela maioria se não todos os contêineres STL.Esta seção discute as convenções e terminologia dos algoritmos de STL.
Comentários
As descrições das funções do modelo de algoritmo empregam várias frases de forma abreviada:
A frase "no intervalo [a, b)" significa que a seqüência de zero ou mais valores distintos, começando com a até, mas não incluindo b.Um intervalo é válido somente se b de A; você pode armazenar a em um objeto n (n = a), incrementar o objeto zero ou mais vezes (+ +n), e tiver o objeto comparar igual a b após um número finito de incrementos (N = = B*).*
A frase "cada n no intervalo [a, b)" significa que n começa com o valor a e será incrementado zero ou mais vezes até que ele é igual ao valor b.O caso n = = b não está no intervalo.
A frase "o menor valor de n no intervalo [a, b) de modo que x" significa que a condição de x é determinado para cada n no intervalo [a, b) até que a condição de x for atendida.
A frase "o maior valor de n no intervalo [a, b) de modo que x significa que x é determinado para cada n no intervalo [a, b).A função armazena em K uma cópia do n cada vez que a condição de x for atendida.Se ocorrer em qualquer loja de tal, a função substitui o valor final da n, que é igual a b, com o valor da K.Para um iterador de acesso aleatório ou bidirecional, no entanto, ele também pode significar que n começa com o maior valor no intervalo e é diminuído pelo intervalo até que a condição de x for atendida.
Expressões como x - Y, onde x e y pode ser iteradores diferente de acesso aleatório iteradores, destinam-se no sentido de matemático.A função não avalia necessariamente operador**–** se ele deve determinar um valor.O mesmo vale também para expressões, como x + n e x - N, onde n é um tipo inteiro.
Vários algoritmos de fazer uso de um predicado que realiza uma comparação emparelhada, como com operator==, para produzir uma bool resultado.A função de predicado operator==, ou qualquer substituição para ele, não deve alterar qualquer um dos operandos.Ele deve produzir o mesmo bool resultar toda vez que ele é avaliado e ele deve produzir o mesmo resultado, se uma cópia de qualquer operador substituirá o operando.
Vários algoritmos de fazer uso de um predicado que deve impor uma ordenação fraco estrito nos pares de elementos de uma seqüência.For the predicate pr(X, Y):
Severo significa que pr(x, x) é false.
Fraco significa que x e y tem um equivalente se pedidos!pr(X, Y) && !pr(Y, X) (X == Y does not need to be defined).
Ordenação significa que pr(x, y) & & pr(Y, Z) implies pr(X, Z).
Alguns desses algoritmos implicitamente usem o predicado x < Y.Outros predicados que normalmente satisfazem o exigência de ordenação de fraco estrito são x > Y, less(X, Y), and greater(X, Y).Observe, Entretanto, que predicados, como x < = y e x > = y não atender a esse requisito.
Uma seqüência de elementos designados pelo iteradores no intervalo [First, Last) é uma seqüência ordenada pelo operador**<** se, para cada n no intervalo [0,Last - First) e para cada m no intervalo (N,Last - First) o predicado!(*(First + M) < *(First + N)) is true.(Observe que os elementos são classificados em ordem crescente). A função de predicado operador <, ou qualquer substituição para ele, não deve alterar qualquer um dos operandos.Ele deve produzir o mesmo bool resultar toda vez que ele é avaliado e ele deve produzir o mesmo resultado, se uma cópia de qualquer operador substituirá o operando.Além disso, ele deve impor uma ordenação estrito fraco em operandos compara.
Uma seqüência de elementos designados pelo iteradores no intervalo [First, Last) é uma pilha ordenada por operador < se, para cada n no intervalo [1,Last - First) o predicado!(*First < *(First + N)) is true.(O primeiro elemento é o maior). Caso contrário, sua estrutura interna é conhecida somente para as funções de modelo make_heap, pop_heap, e push_heap.Como ocorre com uma seqüência ordenada, a função de predicado operador <, ou qualquer substituição para ele, não deve alterar qualquer um dos operandos e ele deve impor uma ordenação estrito fraco em operandos compara.Ele deve produzir o mesmo bool resultar toda vez que ele é avaliado e ele deve produzir o mesmo resultado, se uma cópia de qualquer operador substituirá o operando.
Os algoritmos STL estão localizados na <algorithm> e <numeric> arquivos de cabeçalho.