Algoritmi

Gli algoritmi sono una parte fondamentale della libreria di modelli standard.Gli algoritmi non funzionano con i contenitori stessi ma 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 di un algoritmo STL.

Note

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

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

  • La frase “ogni N nell'intervallo [A, B)„ significa che la N inizia con il valore Su e viene incrementato zero o più volte finché non è uguale al valore B.== B di caso più livelli non rientra nell'intervallo.

  • La frase “il valore inferiore di 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 X viene soddisfatta.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 la 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, è previsto in senso matematico.La funzione non necessariamente valuta l'operatore- se necessario determinare tale valore.Lo stesso è true per le espressioni come X + N e X - N, dove N è un tipo intero.

Diversi algoritmi utilizzano un predicato che esegue pairwise un confronto, ad esempio con operator==, per produrre un risultato di bool .La funzione predicativa operator==, o alcuna sostituzione per, non può alterare uno dei propri operandi.Deve esaminare lo stesso risultato di bool ogni volta che viene valutata e deve esaminare lo stesso risultato se una copia di uno degli operandi è sostituita con l'altro.

Diversi algoritmi utilizzano un predicato che necessario imporre un ordine debole rigido a coppie di elementi da una sequenza.per il predicato pr(X, Y):

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

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

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

alcuni di questi algoritmi in modo implicito utilizzano il predicato X < *Y.*Altri predicati che in genere soddisfano all'esigenza debole rigida di ordine sono X > Y, minore(X, *Y)*e greater(X, Y).Si noti, tuttavia, che i predicati come la <= X e YX >= 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 per ogni m. nell'intervallo (N, Last - First) il predicato! (* (First + M)< * (innanzitutto + N)) è true.Si noti che gli elementi sono riportati in ordine crescente.) La funzione predicativa operator<, o alcuna sostituzione per, non può alterare uno dei propri operandi.Deve esaminare lo stesso risultato di bool ogni volta che viene valutata e deve esaminare lo stesso risultato se una copia di uno degli operandi è sostituita con l'altro.Inoltre, è necessario imporre un ordine debole rigido operandi che confronta.

Una sequenza di elementi definiti dagli iteratori nell'intervallo [First, Last) è un heap ordinata da operator< se, per ogni N nell'intervallo [1, Last - First) il predicato! (*First < * (First + N)) è true.(Il primo elemento è il più grande.) La struttura interna è nota in caso contrario solo alle funzioni make_heap, pop_heape push_heapdel modello.Come con una sequenza ordinata, la funzione predicativa operator<, o alcuna sostituzione per, non può alterare uno dei propri operandi e necessario imporre un ordine debole rigido operandi che confronta.Deve esaminare lo stesso risultato di bool ogni volta che viene valutata e deve esaminare lo stesso risultato se una copia di uno degli operandi è sostituita con l'altro.

Gli algoritmi STL contenuti nella <algorithm> directory e <numeric> file di intestazione.

Vedere anche

Riferimenti

Libreria di modelli standard

Thread safety della libreria C++ standard