<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, ofind_if
algoritmo procura elementos cujos valores satisfazem o critério especificado por um objeto de função, enquanto ofind
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, oreverse
algoritmo inverte a ordem dos elementos dentro de um intervalo, enquanto o algoritmo copiareverse_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++