Condividi tramite


Algoritmi

Gli algoritmi rappresentano una parte fondamentale della libreria di modelli standard. Gli algoritmi non utilizzano i contenitori stessi bensì con gli iteratori. Di conseguenza, lo stesso algoritmo può essere utilizzato dalla maggior parte se non tutti i contenitori STL. In questa sezione vengono illustrate le convenzioni e la terminologia degli algoritmi STL.

Note

Le descrizioni delle funzioni del modello dell'algoritmo utilizzano diverse istruzioni abbreviata:

  • La frase "nell'intervallo [A, B)" significa la sequenza di valori zero o più insiemi discreti a partire da A fino a ma escluso il B. Un intervallo è valido solo se B è raggiungibile da A; è possibile archiviare in un oggetto N (N ) = A., incrementare gli oggetti zero o più volte (++N) e quindi confrontare l'oggetto uguale a B dopo un numero finito di incremento (== N B*.*

  • La frase "ogni N nell'intervallo [A, B)" significa che la N inizia con il valore e viene incrementato zero o più volte fino a quando non è uguale al valore B. == B caso di N non rientra nell'intervallo.

  • La frase "il valore inferiore N nell'intervallo [A, *B)*in modo che la X" significa che la condizione X viene determinata per ogni N nell'intervallo [A, *B)*fino a riempire la condizione X.

  • La frase "il valore massimo N nell'intervallo [A, *B)*in modo che la X indica che la X viene determinata per ogni N nell'intervallo [A, B). La funzione archivia in K una copia di N ogni volta che la condizione viene soddisfatta X. Se qualsiasi archivio si verifica, la funzione sostituisce il valore finale di N, che equivale a B, con il valore di K. Per un iteratore bidirezionale o a accesso casuale, tuttavia, può anche indicare che N inizia con il valore massimo nell'intervallo e diminuisce sull'intervallo fino a riempire la condizione X.

  • Espressioni come X - Y, dove X e Y possono essere iteratori diverso dagli iteratori di accesso casuale, è destinato in senso matematico. La funzione non necessariamente valuta l'operatore- deve determinare se tale valore. La stessa considerazione vale anche true per le espressioni come X + e N X - N, dove N è un tipo intero.

Diversi algoritmi utilizzano un predicato che esegue pairwise un confronto, come con operator==, per produrre un risultato di bool. La funzione predicato operator==, o alcuna sostituzione per, non deve modificare la proprietà uno dei propri operandi. Deve essere lo stesso risultato di bool ogni volta che viene valutato e deve essere lo stesso risultato se una copia di uno degli operandi è sostituita per l'operando.

Diversi algoritmi utilizzano un predicato che deve imporre un ordine debole rispetto alle coppie di elementi da una sequenza. Per il predicato pr(X, Y):

  • Rigido significa che pr(X, *X)*è false.

  • Debole significa che X e Y dispongono di un ordine equivalenti se !pr(X, Y) && !pr(Y, X) (X == Y non deve essere definito).

  • Ordinare significa che pr(X, *Y) &&*pr(Y, Z) implica pr(X, Z).

Alcuni di questi algoritmi in modo implicito utilizzano il predicato X<Y. Altri predicati in genere risponde all'identità debole necessità di ordinamento sono x-y >, less(X, Y) e greater(X, Y). Notare, tuttavia, i predicati come X < = Y = X > e Y non soddisfano questo requisito.

Una sequenza di elementi definiti dagli iteratori nell'intervallo [First, Last) è una sequenza ordinata dall'operatore**<** se, per ogni N nell'intervallo [0, Last - First) e ciascun metodo. nell'intervallo (N, Last - First) il predicato! (* (First + M) <* (primo N)+) è true. Si noti che gli elementi sono riportati in ordine crescente.) La funzione predicato operatore<, o alcuna sostituzione per, non deve modificare la proprietà uno dei propri operandi. Deve essere lo stesso risultato di bool ogni volta che viene valutato e deve essere lo stesso risultato se una copia di uno degli operandi è sostituita per l'operando. Inoltre, è necessario imporre un ordine debole rispetto agli operandi che confronta.

Una sequenza di elementi definiti dagli iteratori nell'intervallo [First, Last) è un heap ordinata da operatore< se, per ogni N nell'intervallo [1, Last - First) il predicato! (*First < * (+FirstN)) è true. (Il primo elemento è il più grande.) La struttura interna è nota in caso contrario solo alle funzioni make_heap, pop_heap e push_heapdel modello. Come con una sequenza ordinata, la funzione predicato operatore<, o alcuna sostituzione per, non deve modificare la proprietà uno dei propri operandi e deve imporre un ordine debole rispetto agli operandi che confronta. Deve essere lo stesso risultato di bool ogni volta che viene valutato e deve essere lo stesso risultato se una copia di uno degli operandi è sostituita per l'operando.

Gli algoritmi STL si trovano nei file di intestazione di <numeric> e di <algorithm>.

Vedere anche

Riferimenti

Libreria di modelli standard

Sicurezza dei thread nella libreria standard C++