Condividi tramite


<algorithm>

Definisce le funzioni di modello del contenitore di libreria standard C++ che eseguono algoritmi.

Sintassi

(see links below for specific algorithm syntax)

Nota

La <algorithm> libreria usa anche l'istruzione #include <initializer_list> .

Osservazioni:

Gli algoritmi della libreria standard C++ possono operare su varie strutture di dati. Le strutture di dati su cui possono operare includono non solo le classi contenitore della libreria standard C++ come vector e list, ma anche le strutture di dati definite dall'utente e le matrici di elementi, purché soddisfino i requisiti di un particolare algoritmo. Gli algoritmi di libreria standard C++ raggiungono tale livello di generalità accedendo e attraversando gli elementi di un contenitore indirettamente tramite gli iteratori.

Gli algoritmi di libreria standard C++ consentono di elaborare gli intervalli dell'iteratore che vengono in genere specificati dalle relative posizioni iniziali o finali. Gli intervalli a cui si fa riferimento devono essere validi nel senso che tutti gli iteratori negli intervalli devono essere dereferenziabili e, all'interno delle sequenze di ogni intervallo, l'ultima posizione deve essere raggiungibile dal primo incrementando l'iteratore.

A partire da C++20, la maggior parte degli algoritmi definiti in <algorithm> è disponibile anche in un formato che accetta un oggetto range. Ad esempio, anziché chiamare sort(v1.begin(), v1.end(), greater<int>());, è possibile chiamare ranges::sort(v1, greater<int>());

Gli algoritmi della libreria standard C++ possono funzionare contemporaneamente con diversi tipi di oggetti contenitore. Sono stati usati due suffissi per comunicare informazioni sullo scopo degli algoritmi:

  • Il _if suffisso indica che l'algoritmo viene utilizzato con oggetti funzione che operano sui valori degli elementi anziché sugli elementi stessi. Ad esempio, l'algoritmo find_if cerca gli elementi i cui valori soddisfano il criterio specificato da un oggetto funzione, mentre l'algoritmo find cerca un determinato valore.

  • Il _copy suffisso indica che l'algoritmo modifica in genere i valori copiati anziché copiare i valori modificati. In altre parole, non modificano gli elementi dell'intervallo di origine, ma inseriscono i risultati in un intervallo di output/iteratore. Ad esempio, l'algoritmo reverse inverte l'ordine degli elementi all'interno di un intervallo, mentre l'algoritmo reverse_copy copia il risultato invertito in un intervallo di destinazione.

Gli algoritmi della libreria standard C++ vengono spesso classificati in gruppi per indicare lo scopo o i requisiti. Questi includono la modifica di algoritmi che modificano il valore degli elementi rispetto agli algoritmi non modificanti che non lo fanno. Gli algoritmi di modifica consentono di modificare l'ordine degli elementi, ma non i valori dei relativi elementi. La rimozione degli algoritmi può determinare l'eliminazione degli elementi da un intervallo o dalla copia di un intervallo. Gli algoritmi di ordinamento riordinano gli elementi in un intervallo in vari modi e gli algoritmi di intervallo ordinati agiscono solo sugli intervalli i cui elementi sono stati ordinati in modo specifico.

Gli algoritmi numerici della libreria standard C++ forniti per l'elaborazione numerica hanno il proprio file <numeric>di intestazione e gli oggetti funzione e gli adattatori vengono definiti nell'intestazione <functional>. Gli oggetti funzione che restituiscono valori booleani sono noti come predicati. Il predicato binario predefinito è l'operatore di confronto operator<. In generale, gli elementi ordinati devono essere meno di paragonabili in modo che, dato qualsiasi due elementi, possa essere determinato che sono equivalenti (nel senso che nessuno è minore dell'altro) o che uno è minore dell'altro. Di conseguenza, l'ordinamento viene eseguito tra gli elementi non equivalenti.

Algoritmi

Nome Descrizione
adjacent_find Cerca due elementi adiacenti uguali o che soddisfano una condizione specificata.
all_of Restituisce true quando una condizione è presente in ogni elemento dell'intervallo specificato.
any_of Restituisce true quando una condizione è presente almeno una volta nell'intervallo di elementi specificato.
binary_search Verifica se in un intervallo ordinato è presente un elemento uguale a un valore specificato o equivalente a tale valore nel senso specificato da un predicato binario.
clamp
copy Assegna i valori degli elementi di un intervallo di origine a un intervallo di destinazione, scorrendo la sequenza di origine degli elementi e assegnando loro nuove posizioni in avanti.
copy_backward Assegna i valori degli elementi di un intervallo di origine a un intervallo di destinazione, scorrendo la sequenza di origine degli elementi e assegnando loro nuove posizioni in indietro.
copy_if Copia tutti gli elementi in un intervallo specificato che restituiscono true per una condizione specificata.
copy_n Copia un numero specificato di elementi.
count Restituisce il numero di elementi di un intervallo i cui valori corrispondono a un valore specificato.
count_if Restituisce il numero di elementi di un intervallo i cui valori corrispondono a una condizione specificata.
equal Confronta due intervalli elemento per elemento per verificarne l'uguaglianza o l'equivalenza nel senso specificato da un predicato binario.
equal_range Trova una coppia di posizioni in un intervallo ordinato, la prima inferiore o equivalente alla posizione di un elemento specificato e la seconda maggiore della posizione di tale elemento, in cui il senso dell'equivalenza o dell'ordinamento usato per stabilire le posizioni nella sequenza può essere specificato da un predicato binario.
fill Assegna lo stesso nuovo valore a ogni elemento di un intervallo specificato.
fill_n Assegna un nuovo valore a un numero specificato di elementi di un intervallo a partire da un determinato elemento.
find Individua la posizione della prima occorrenza di un elemento in un intervallo con un valore specificato.
find_end Ricerca in un intervallo l'ultima sottosequenza identica a una sequenza specificata o equivalente nel senso specificato da un predicato binario.
find_first_of Ricerca la prima occorrenza di uno dei diversi valori all'interno di un intervallo di destinazione o la prima occorrenza di uno dei diversi elementi equivalenti nel senso specificato da un predicato binario in un set specificato di elementi.
find_if Individua la posizione della prima occorrenza di un elemento in un intervallo che soddisfa una condizione specificata.
find_if_not Restituisce il primo elemento dell'intervallo indicato che non soddisfa una condizione.
for_each Applica un oggetto funzione specificato a ogni elemento ordinato in avanti all'interno di un intervallo e restituisce l'oggetto funzione.
for_each_n
generate Assegna i valori generati da un oggetto funzione a ogni elemento di un intervallo.
generate_n Assegna i valori generati da un oggetto funzione a un numero specificato di elementi di un intervallo e torna alla posizione immediatamente successiva all'ultimo valore assegnato.
includes Verifica se un intervallo ordinato contiene tutti gli elementi contenuti in un secondo intervallo ordinato, in cui il criterio di ordinamento o di equivalenza tra gli elementi può essere specificato da un predicato binario.
inplace_merge Combina gli elementi di due intervalli ordinati consecutivi in un unico intervallo ordinato, in cui il criterio di ordinamento può essere specificato da un predicato binario.
is_heap Restituisce true se gli elementi dell'intervallo specificato formano un heap.
is_heap_until Restituisce true se l'intervallo specificato forma un heap fino all'ultimo elemento.
is_partitioned Restituisce true se tutti gli elementi dell'intervallo specificato che testano true per una condizione precedono gli elementi che testano false.
is_permutation Determina se gli elementi in un determinato intervallo formano una permutazione valida.
is_sorted Restituisce true se gli elementi dell'intervallo specificato sono ordinati.
is_sorted_until Restituisce true se gli elementi dell'intervallo specificato sono ordinati.
iter_swap Scambia due valori a cui viene fatto riferimento da una coppia di iteratori specificati.
lexicographical_compare Confronta due sequenze elemento per elemento per determinare quale delle due è minore.
lower_bound Trova la posizione del primo elemento in un intervallo ordinato con un valore maggiore o equivalente a un valore specificato, in cui il criterio di ordinamento può essere specificato da un predicato binario.
make_heap Converte gli elementi di un intervallo specificato in un heap in cui il primo elemento è il più grande e per il quale un criterio di ordinamento può essere specificato con un predicato binario.
max Confronta due oggetti e restituisce il maggiore dei due in cui il criterio di ordinamento può essere specificato da un predicato binario.
max_element Trova la prima occorrenza dell'elemento più grande in un intervallo specificato in cui il criterio di ordinamento può essere specificato da un predicato binario.
merge Combina tutti gli elementi di due intervalli di origine ordinati in un unico intervallo di destinazione ordinato, in cui il criterio di ordinamento può essere specificato da un predicato binario.
min Confronta due oggetti e restituisce il minore dei due in cui il criterio di ordinamento può essere specificato da un predicato binario.
min_element Trova la prima occorrenza dell'elemento più piccolo in un intervallo specificato in cui il criterio di ordinamento può essere specificato da un predicato binario.
minmax Confronta due parametri di input e li restituisce come coppia, in ordine crescente.
minmax_element Esegue le operazioni eseguite da min_element e max_element in un'unica chiamata.
mismatch Confronta due intervalli elemento per elemento per verificarne l'uguaglianza o l'equivalenza nel senso specificato da un predicato binario e individua la prima posizione in cui viene riscontrata una differenza.
<alg> move Sposta gli elementi associati a un intervallo specificato.
move_backward Sposta gli elementi di un iteratore in un altro. Lo spostamento inizia con l'ultimo elemento in un intervallo specificato e termina con il primo elemento in quell'intervallo.
next_permutation Riordina gli elementi in un intervallo in modo che l'ordine originale venga sostituito dalla maggior permutazione a livello lessicografico successiva, se esiste, dove il senso di successivo può essere specificato con un predicato binario.
none_of Restituisce true quando una condizione non è mai presente tra gli elementi dell'intervallo specificato.
nth_element Esegue la partizione di un intervallo di elementi, individuando correttamente l'ennesimo elemento della sequenza nell'intervallo in modo che tutti gli elementi che lo precedono siano minori o uguali a esso e che tutti gli elementi che lo seguono nella sequenza siano maggiori o uguali.
partial_sort Dispone un numero specificato di elementi più piccoli di un intervallo in un ordine non decrescente o secondo un criterio di ordinamento specificato da un predicato binario.
partial_sort_copy Copia gli elementi di un intervallo di origine in un intervallo di destinazione in cui gli elementi di origine sono ordinati in base al predicato binario relativo al valore inferiore o a un altro predicato binario specificato.
partition Classifica gli elementi di un intervallo in due set non contigui, con gli elementi che soddisfano il predicato unario che precedono quelli che non lo soddisfano.
partition_copy Copia gli elementi per i quali una condizione è true in una destinazione e quelli per i quali la condizione è false in un'altra. Gli elementi devono provenire da un intervallo specificato.
partition_point Restituisce il primo elemento nell'intervallo specificato che non soddisfa la condizione. Gli elementi vengono ordinati in modo che quelli che soddisfano la condizione vengano prima di quelli che non lo fanno.
pop_heap Rimuove l'elemento più grande dall'inizio di un heap alla penultima posizione nell'intervallo e costituisce un nuovo heap con gli elementi rimanenti.
prev_permutation Riordina gli elementi in un intervallo in modo che l'ordine originale venga sostituito dalla maggior permutazione a livello lessicografico successiva, se esiste, dove il senso di successivo può essere specificato con un predicato binario.
push_heap Aggiunge un elemento che si trova alla fine di un intervallo a un heap esistente costituito dagli elementi precedenti dell'intervallo.
random_shuffle Ridispone una sequenza di N elementi di un intervallo in una di N! possibili disposizioni selezionate in modo casuale.
remove Elimina un valore specificato da un intervallo specificato senza alterare l'ordine degli elementi rimanenti e restituendo la fine di un nuovo intervallo senza il valore specificato.
remove_copy Copia gli elementi da un intervallo di origine a un intervallo di destinazione, ad eccezione del fatto che gli elementi di un valore specificato non vengono copiati, senza disturbare l'ordine degli elementi rimanenti e restituire la fine di un nuovo intervallo di destinazione.
remove_copy_if Copia gli elementi da un intervallo di origine a un intervallo di destinazione, ad eccezione del fatto che un predicato non viene copiato, senza disturbare l'ordine degli elementi rimanenti e restituire la fine di un nuovo intervallo di destinazione.
remove_if Elimina gli elementi che soddisfano un predicato da un intervallo specificato senza alterare l'ordine degli elementi rimanenti e restituendo la fine di un nuovo intervallo senza il valore specificato.
replace Esamina ogni elemento di un intervallo e lo sostituisce se corrisponde a un valore specificato.
replace_copy Esamina ogni elemento di un intervallo di origine e lo sostituisce se corrisponde a un valore specificato copiando nel contempo il risultato in un nuovo intervallo di destinazione.
replace_copy_if Esamina ogni elemento di un intervallo di origine e lo sostituisce se soddisfa un predicato specificato copiando nel contempo il risultato in un nuovo intervallo di destinazione.
replace_if Esamina ogni elemento di un intervallo e lo sostituisce se soddisfa un predicato specificato.
reverse Inverte l'ordine degli elementi all'interno di un intervallo.
reverse_copy Inverte l'ordine degli elementi all'interno di un intervallo di origine copiandoli nel contempo in un intervallo di destinazione
rotate Scambia gli elementi di due intervalli adiacenti.
rotate_copy Scambia gli elementi di due intervalli adiacenti all'interno di un intervallo di origine e copia il risultato in un intervallo di destinazione.
sample
search Cerca la prima occorrenza di una sequenza all'interno di un intervallo di destinazione i cui elementi sono uguali a quelli di una sequenza specificata di elementi oppure i cui elementi sono equivalenti nel senso specificato da un predicato binario agli elementi della sequenza specificata.
search_n Cerca la prima sottosequenza di un intervallo di un numero specificato di elementi che dispongono di un valore specifico o di una relazione con tale valore come specificato da un predicato binario.
set_difference Unisce tutti gli elementi appartenenti a un intervallo di origine ordinato, ma non a un secondo intervallo di origine ordinato, in un unico intervallo di destinazione ordinato in cui il criterio di ordinamento può essere specificato da un predicato binario.
set_intersection Unisce tutti gli elementi appartenenti a entrambi gli intervalli di origine ordinati in un unico intervallo di destinazione ordinato in cui il criterio di ordinamento può essere specificato da un predicato binario.
set_symmetric_difference Unisce tutti gli elementi appartenenti a uno degli intervalli di origine ordinati, ma non ad entrambi, in un unico intervallo di destinazione ordinato in cui il criterio di ordinamento può essere specificato da un predicato binario.
set_union Unisce tutti gli elementi appartenenti almeno a uno dei due intervalli di origine ordinati in un unico intervallo di destinazione ordinato in cui il criterio di ordinamento può essere specificato da un predicato binario.
sort Dispone gli elementi di un intervallo specificato in un ordine non decrescente o secondo un criterio di ordinamento specificato da un predicato binario.
shuffle Riproduce con sequenza casuale (ridispone) gli elementi di un intervallo specifico usando un generatore di numeri casuali.
sort_heap Converte un heap in un intervallo ordinato.
stable_partition Classifica gli elementi di un intervallo in due set non contigui, con gli elementi che soddisfano un predicato unario che precedono quelli che non lo soddisfano, mantenendo l'ordine relativo degli elementi equivalenti.
stable_sort Dispone gli elementi di un intervallo specificato in un ordine non decrescente o secondo un criterio di ordinamento specificato da un predicato binario e mantiene l'ordinamento relativo degli elementi equivalenti.
swap Scambia i valori degli elementi tra due tipi di oggetti, assegnando il contenuto del primo oggetto al secondo oggetto e il contenuto del secondo al primo.
swap_ranges Scambia gli elementi di un intervallo con gli elementi di un altro intervallo di uguali dimensioni.
transform Applica un oggetto funzione ad ogni elemento di un intervallo di origine o a una coppia di elementi di due intervalli di origine e copia i valori restituiti dell'oggetto funzione in un intervallo di destinazione.
unique Rimuove gli elementi duplicati che si trovano uno accanto all'altro in un intervallo specificato.
unique_copy Copia gli elementi da un intervallo di origine in un intervallo di destinazione, ad eccezione degli elementi duplicati che si trovano uno accanto all'altro.
upper_bound Trova la posizione del primo elemento in un intervallo ordinato con un valore maggiore di un valore specificato, in cui il criterio di ordinamento può essere specificato da un predicato binario.

Vedi anche

Riferimento file di intestazione
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++