<algorithm>

Define as funções de modelo do contêiner da Biblioteca Padrão do C++ que executam algoritmos.

Sintaxe

(see links below for specific algorithm syntax)

Observação

A biblioteca <algorithm> também usa a instrução #include <initializer_list>.

Comentários

Os algoritmos da Biblioteca Padrão do C++ podem operar em várias estruturas de dados. As estruturas de dados nas quais eles podem operar incluem não apenas as classes de contêiner da Biblioteca Padrão do C++, como vector e list, mas também estruturas de dados definidas pelo usuário e matrizes de elementos, desde que atendam aos requisitos de um algoritmo específico. Os algoritmos da Biblioteca Padrão do C++ atingem esse nível de generalidade acessando e percorrendo os elementos de um contêiner indiretamente por meio de iteradores.

Os algoritmos da Biblioteca Padrão do C++ processam intervalos de iteradores que, geralmente, são especificados pelas sua posições iniciais ou finais. Os intervalos referidos devem ser válidos no sentido de que todos os iteradores nos intervalos devem ser desreferenciáveis e, dentro das sequências de cada intervalo, a última posição deve ser alcançável a partir da primeira incrementando o iterador.

A partir do C++20, a maioria dos algoritmos definidos em <algorithm> também está disponível em um formato que usa um range. Por exemplo, em vez de chamar sort(v1.begin(), v1.end(), greater<int>());, você pode chamar ranges::sort(v1, greater<int>());

Os algoritmos da Biblioteca Padrão do C++ podem trabalhar com diferentes tipos de objetos de contêiner ao mesmo tempo. Dois sufixos foram usados para transmitir informações sobre o propósito dos algoritmos:

  • O _if sufixo indica que o algoritmo é usado com objetos de função que operam nos valores dos elementos e não nos próprios elementos. Por exemplo, o find_if algoritmo procura elementos cujos valores satisfazem o critério especificado por um objeto de função, enquanto o find algoritmo procura um valor específico.

  • O _copy sufixo indica que o algoritmo geralmente modifica os valores copiados em vez de copiar os valores modificados. Em outras palavras, eles não modificam os elementos do intervalo de origem, mas colocam os resultados em um intervalo/iterador de saída. Por exemplo, o reverse algoritmo inverte a ordem dos elementos dentro de um intervalo, enquanto o algoritmo copia reverse_copy o resultado reverso em um intervalo de destino.

Os algoritmos da Biblioteca Padrão do C++ geralmente são classificados em grupos para indicar sua finalidade ou requisitos. Isso inclui algoritmos de modificação que alteram o valor dos elementos em comparação com algoritmos não modificadores que não o fazem. Os algoritmos mutantes alteram a ordem dos elementos, mas não os valores de seus elementos. A remoção dos algoritmos pode eliminar elementos de um intervalo ou uma cópia de um intervalo. Os algoritmos de classificação reordenam de várias formas os elementos em um intervalo e os algoritmos do intervalo classificado atuam somente em intervalos cujos elementos foram classificados de uma determinada forma.

Os algoritmos numéricos da Biblioteca Padrão do C++ fornecidos para processamento numérico têm seu próprio arquivo <numeric>de cabeçalho e os objetos de função e adaptadores são definidos no cabeçalho <functional>. Objetos de função que retornam valores boolianos são conhecidos como predicados. O predicado binário padrão é a comparação operator<. Em geral, os elementos que estão sendo ordenados precisam ser menos do que comparáveis para que, dados quaisquer dois elementos, possa ser determinado que eles são equivalentes (no sentido de que nenhum é menor que o outro) ou que um é menor que o outro. Isso resulta em uma ordenação entre os elementos não equivalentes.

Algoritmos

Nome Descrição
adjacent_find Procura dois elementos adjacentes que sejam iguais ou atendam a uma condição especificada.
all_of Retorna true quando uma condição está presente em cada elemento no intervalo determinado.
any_of Retorna true quando uma condição está presente, pelo menos, uma vez no intervalo de elementos especificado.
binary_search Testa se há um elemento em um intervalo classificado que seja igual a um valor especificado ou equivalente a ele de modo especificado por um predicado binário.
clamp
copy Atribui os valores dos elementos de um intervalo de origem a um intervalo de destino, iterando pela sequência de elementos de origem e atribuindo-lhes novas posições em uma direção progressiva.
copy_backward Atribui os valores dos elementos de um intervalo de origem a um intervalo de destino, iterando pela sequência de elementos de origem e atribuindo-lhes novas posições em uma direção retroativa.
copy_if Copia todos os elementos em um determinado intervalo que testam uma condição especificada de true.
copy_n Copia um número especificado de elementos.
count Retorna o número de elementos em um intervalo cujos valores correspondem a um valor especificado.
count_if Retorna o número de elementos em um intervalo cujos valores correspondem a uma condição especificada.
equal Compara a igualdade ou equivalência de dois intervalos, elemento por elemento, de certo modo especificado por um predicado binário.
equal_range Localiza um par de posições em um intervalo ordenado, o primeiro menor ou equivalente à posição de um elemento especificado e o segundo maior que a posição do elemento, em que o sentido de equivalência ou de ordenação usada para estabelecer as posições na sequência pode ser especificado por um predicado binário.
fill Atribui o mesmo novo valor para cada elemento em um intervalo especificado.
fill_n Atribuir um novo valor a um número especificado de elementos em um intervalo que começa com um elemento específico.
find Localiza a posição da primeira ocorrência de um elemento em um intervalo que tem um valor especificado.
find_end Examina um intervalo em busca da última subsequência que seja idêntica a uma sequência especificada ou que seja equivalente de certo modo especificado por um predicado binário.
find_first_of Procura a primeira ocorrência de qualquer um dos vários valores em um intervalo de destino ou a primeira ocorrência de qualquer um dos vários elementos que são equivalentes de certo modo especificado por um predicado binário a um conjunto especificado dos elementos.
find_if Localiza a posição da primeira ocorrência de um elemento em um intervalo que atende a uma condição especificada.
find_if_not Retorna o primeiro elemento no intervalo indicado que não atende a uma condição.
for_each Aplica um objeto de função especificado a cada elemento em uma ordem progressiva dentro de um intervalo e retorna o objeto de função.
for_each_n
generate Atribui os valores gerados por um objeto de função a cada elemento em um intervalo.
generate_n Atribui os valores gerados por um objeto de função a um número especificado de elementos em um intervalo e retorna para uma posição antes do último valor atribuído.
includes Testa se um intervalo classificado contém todos os elementos contidos em um segundo intervalo classificado, em que o critério de equivalência ou ordenação entre elementos pode ser especificado por um predicado binário.
inplace_merge Combina os elementos de dois intervalos classificados consecutivos em um único intervalo classificado, em que o critério de ordenação pode ser especificado por um predicado binário.
is_heap Retornará true se os elementos no intervalo especificado formarem um heap.
is_heap_until Retornará true se o intervalo especificado formar um heap até o último elemento.
is_partitioned Retornará true se todos os elementos no intervalo determinado que testam true para uma condição vierem antes de qualquer elemento que testa false.
is_permutation Determina se os elementos em determinado intervalo formam uma permutação válida.
is_sorted Retornará true se os elementos no intervalo especificado estiverem em ordem classificada.
is_sorted_until Retornará true se os elementos no intervalo especificado estiverem em ordem classificada.
iter_swap Troca dois valores referenciados por um par de iteradores especificados.
lexicographical_compare Compara elemento por elemento entre duas sequências para determinar qual é o menor dos dois.
lower_bound Localiza a posição do primeiro elemento em um intervalo ordenado com um valor que é maior ou equivalente a um valor especificado, em que o critério de ordenação pode ser especificado por um predicado binário.
make_heap Converte os elementos de um intervalo especificado em um heap no qual o primeiro elemento é o maior e para o qual um critério de classificação pode ser especificado com um predicado binário.
max Compara dois objetos e retorna o maior dos dois, em que o critério de ordenação pode ser especificado por um predicado binário.
max_element Localiza a primeira ocorrência do maior elemento em um intervalo especificado, em que o critério de ordenação pode ser especificado por um predicado binário.
merge Combina todos os elementos de dois intervalos classificados de origem em um único intervalo de destino classificado, em que o critério de ordenação pode ser especificado por um predicado binário.
min Compara dois objetos e retorna o menor dos dois, em que o critério de ordenação pode ser especificado por um predicado binário.
min_element Localiza a primeira ocorrência do menor elemento em um intervalo especificado, em que o critério de ordenação pode ser especificado por um predicado binário.
minmax Compara dois parâmetros de entrada e os retorna como um par, em ordem do menor para o maior.
minmax_element Executa o trabalho realizado por min_element e max_element em uma chamada.
mismatch Compara dois intervalos, elemento por elemento, por igualdade ou equivalência de certo modo especificado por um predicado binário e localiza a primeira posição onde ocorre uma diferença.
<alg> move Move elementos associados a um intervalo especificado.
move_backward Move os elementos de um iterador para outro. O movimento inicia com o último elemento em um intervalo especificado e termina com o primeiro elemento desse intervalo.
next_permutation Reordena os elementos em um intervalo para que a ordenação original seja substituída pela próxima permutação lexicograficamente maior, se ela existir, em que o sentido de próxima pode ser especificado com um predicado binário.
none_of Retorna true quando uma condição nunca é apresentada entre os elementos no intervalo determinado.
nth_element Particiona um intervalo de elementos, localizando corretamente o nº elemento da sequência no intervalo para que todos os elementos anteriores sejam menores ou iguais a ele e todos os elementos posteriores na sequência sejam maiores ou iguais a ele.
partial_sort Organiza um número especificado de elementos menores em um intervalo em ordem não decrescente ou de acordo com um critério de ordenação especificado por um predicado binário.
partial_sort_copy Copia elementos de um intervalo de origem em um intervalo de destino, em que os elementos de origem são ordenados por menor que ou outro predicado binário especificado.
partition Classifica os elementos de um intervalo em dois conjuntos separados, com esses elementos atendendo a um predicado unário que precede aqueles que não o atendem.
partition_copy Copia elementos para os quais uma condição é true para um destino e para os quais a condição é false para outro. Os elementos devem vir de um intervalo especificado.
partition_point Retorna o primeiro elemento no intervalo fornecido que não atende à condição. Os elementos são classificados de modo que aqueles que satisfazem a condição venham antes daqueles que não satisfazem.
pop_heap Remove o maior elemento da frente de um heap para a penúltima posição no intervalo e, em seguida, forma um novo heap com os elementos restantes.
prev_permutation Reordena os elementos em um intervalo para que a ordenação original seja substituída pela próxima permutação lexicograficamente maior, se ela existir, em que o sentido de próxima pode ser especificado com um predicado binário.
push_heap Adiciona um elemento que está no fim de um intervalo a um heap existente que consiste em elementos anteriores no intervalo.
random_shuffle Reorganiza uma sequência de N elementos em um intervalo em uma de N! possíveis organizações selecionadas aleatoriamente.
remove Elimina um valor especificado de um determinado intervalo sem afetar a ordem dos elementos restantes e retornando ao fim de um novo intervalo livre do valor especificado.
remove_copy Copia elementos de um intervalo de origem para um intervalo de destino, exceto que os elementos de um valor especificado não são copiados, sem perturbar a ordem dos elementos restantes e retornar o final de um novo intervalo de destino.
remove_copy_if Copia elementos de um intervalo de origem para um intervalo de destino, exceto que a satisfação de um predicado não é copiada, sem perturbar a ordem dos elementos restantes e retornar o final de um novo intervalo de destino.
remove_if Elimina elementos que atendem a um predicado de um determinado intervalo sem afetar a ordem dos elementos restantes e retornando ao fim de um novo intervalo livre do valor especificado.
replace Examina cada elemento em um intervalo e o substitui se ele corresponder a um valor especificado.
replace_copy Examina cada elemento em um intervalo de origem e o substitui se ele corresponder a um valor especificado ao copiar o resultado em um novo intervalo de destino.
replace_copy_if Examina cada elemento em um intervalo de origem e o substitui se ele atender a um predicado especificado ao copiar o resultado em um novo intervalo de destino.
replace_if Examina cada elemento em um intervalo e o substitui se ele atender a um predicado especificado.
reverse Inverte a ordem dos elementos em um intervalo.
reverse_copy Inverte a ordem dos elementos em um intervalo de origem ao copiá-los em um intervalo de destino
rotate Troca os elementos em dois intervalos adjacentes.
rotate_copy Troca os elementos em dois intervalos adjacentes em um intervalo de origem e copia o resultado em um intervalo de destino.
sample
search Procura a primeira ocorrência de uma sequência em um intervalo de destino cujos elementos são iguais àqueles em uma determinada sequência de elementos ou cujos elementos são equivalentes de certo modo especificado por um predicado binário para os elementos na sequência determinada.
search_n Procura a primeira subsequência em um intervalo de um número especificado de elementos com um valor particular ou uma relação com esse valor, conforme especificado por um predicado binário.
set_difference Une todos os elementos que pertencem a um intervalo de origem classificado, mas não a um segundo intervalo de origem classificado, em um único intervalo de destino classificado, em que o critério de ordenação pode ser especificado por um predicado específico.
set_intersection Une todos os elementos que pertencem a ambos os intervalos de origem classificados em um único intervalo de destino classificado, em que o critério de ordenação pode ser especificado por um predicado binário.
set_symmetric_difference Une todos os elementos que pertencem a um (mas não a ambos) dos intervalos de origem classificados em um único intervalo de destino classificado, em que o critério de ordenação pode ser especificado por um predicado binário.
set_union Une todos os elementos que pertencem a pelo menos um dos dois intervalos de origem classificados em um único intervalo de destino classificado, em que o critério de ordenação pode ser especificado por um predicado binário.
sort Organiza os elementos de um intervalo especificado em ordem não decrescente ou de acordo com um critério de ordenação especificado por um predicado binário.
shuffle Mistura (reorganiza) elementos para um determinado intervalo usando um gerador de números aleatório.
sort_heap Converte um heap em um intervalo classificado.
stable_partition Classifica os elementos de um intervalo em dois conjuntos separados, com esses elementos atendendo a um predicado unário que precede aqueles que não o atendem, preservando a ordem relativa dos elementos equivalentes.
stable_sort Organiza os elementos de um intervalo especificado em ordem não decrescente ou de acordo com um critério de ordenação especificado por um predicado binário e preserva a ordenação relativa de elementos equivalentes.
swap Troca os valores dos elementos entre dois tipos de objeto, atribuindo o conteúdo do primeiro objeto ao segundo objeto e o conteúdo do segundo ao primeiro.
swap_ranges Troca os elementos de um intervalo com os elementos de outro, de tamanho igual.
transform Aplica um objeto de função especificado a cada elemento em um intervalo de origem ou a um par de elementos de dois intervalos de origem e copia os valores de retorno do objeto de função em um intervalo de destino.
unique Remove elementos duplicados que são adjacentes um ao outro em um intervalo especificado.
unique_copy Copia elementos de um intervalo de origem em um intervalo de destino, exceto os elementos duplicados que são adjacentes um ao outro.
upper_bound Localiza a posição do primeiro elemento em um intervalo ordenado com um valor que é maior a um valor especificado, em que o critério de ordenação pode ser especificado por um predicado binário.

Confira também

Referência de Arquivos de Cabeçalho
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++