<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'algoritmofind_if
cerca gli elementi i cui valori soddisfano il criterio specificato da un oggetto funzione, mentre l'algoritmofind
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'algoritmoreverse
inverte l'ordine degli elementi all'interno di un intervallo, mentre l'algoritmoreverse_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++