algorithms stl
Uno studio esplicito degli algoritmi e dei suoi tipi in STL.
i 10 migliori siti di download di mp3 gratuiti
STL supporta vari algoritmi che agiscono sui contenitori tramite iteratori. Poiché questi algoritmi agiscono sugli iteratori e non direttamente sui contenitori, possono essere utilizzati su qualsiasi tipo di iteratore.
Gli algoritmi STL sono integrati e quindi fanno risparmiare molto tempo e sono anche più affidabili. Inoltre migliorano la riusabilità del codice. Questi algoritmi sono normalmente solo una chiamata di funzione e non è necessario scrivere codice esaustivo per implementarli.
=> Cerca qui l'intera serie di formazione C ++.
Cosa imparerai:
Tipi di algoritmi STL
STL supporta i seguenti tipi di algoritmi
- Algoritmi di ricerca
- Algoritmi di ordinamento
- Algoritmi numerici
- Algoritmi di non trasformazione / modifica
- Algoritmi di trasformazione / modifica
- Operazioni minime e massime
Discuteremo ciascuno di questi tipi in dettaglio nei paragrafi seguenti.
Cerca e ordina gli algoritmi
L'algoritmo di ricerca prominente in STL è una ricerca binaria. L'algoritmo di ricerca binaria opera su un array ordinato e cerca l'elemento dividendo l'array a metà.
Questo viene fatto confrontando prima l'elemento da cercare con l'elemento centrale dell'array e quindi limitando la ricerca a 1stmetà o 2ndmetà della matrice a seconda che l'elemento da cercare sia minore o maggiore dell'elemento centrale.
La ricerca binaria è l'algoritmo di ricerca più utilizzato.
La sua sintassi generale è:
binary_search(startaddr, endaddr, key)
Dove,
startaddr: indirizzo del primo elemento dell'array.
endaddr: indirizzo dell'ultimo elemento dell'array.
chiave: l'elemento da cercare.
STL ci fornisce un algoritmo di 'ordinamento' che viene utilizzato per disporre gli elementi in un contenitore in un ordine particolare.
La sintassi generale dell'algoritmo di ordinamento è:
sort(startAddr, endAddr);
Dove,
startAddr: indirizzo iniziale dell'array da ordinare.
endAddr: indirizzo finale dell'array da ordinare.
Internamente STL utilizza l'algoritmo Quicksort per ordinare l'array.
Facciamo un esempio per dimostrare la ricerca binaria e l'algoritmo di ordinamento:
#include #include using namespace std; int main() { int testAry() = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 }; int arysize = sizeof(testAry) / sizeof(testAry(0)); sort(testAry, testAry + arysize); cout<<'
Sorted Array is
'; for(int i=0;i Produzione:
Sorted Array è
0 1 2 3 4 5 6 7 8 9
Chiave = 2 trovata nell'array
Chiave = 10 non trovata nell'array
Nel codice fornito, abbiamo fornito un array in cui dobbiamo cercare un elemento chiave utilizzando la ricerca binaria. Poiché la ricerca binaria richiede un array ordinato, per prima cosa ordiniamo l'array utilizzando l'algoritmo 'sort' e quindi effettuiamo una chiamata a 'binary_search' fornendo i parametri richiesti.
Innanzitutto, chiamiamo l'algoritmo binary_search per key = 2 e quindi per key = 10. In questo modo con una sola chiamata di funzione possiamo comodamente fare una ricerca binaria su un array o ordinarlo.
Algoritmi numerici
l'intestazione in AWL contiene varie funzioni che operano su valori numerici. Queste funzioni vanno dalla ricerca di lcds, gcds al calcolo della somma degli elementi in un contenitore come array, vettori su un determinato intervallo, ecc.
Discuteremo alcune importanti funzioni qui con esempi.
(i) accumulare
La sintassi generale della funzione di accumulo è:
accumulate (first, last, sum);
Questa funzione restituisce la somma di tutti gli elementi all'interno di un intervallo (primo, ultimo) in una somma variabile. Nella notazione della sintassi sopra, first e last sono gli indirizzi del primo e dell'ultimo elemento in un contenitore e sum è il valore iniziale della variabile sum.
(ii) somma_parziale
La sintassi generale della funzione partial_sum è:
partial_sum(first, last, b)
Qui
primo: indirizzo dell'elemento iniziale del contenitore.
Ultimo: indirizzo dell'ultimo elemento del contenitore.
B: array in cui verrà memorizzata la somma parziale degli elementi dell'array corrispondenti.
Pertanto, la funzione partial_sum calcola la somma parziale dell'array corrispondente o degli elementi vettoriali e li memorizza in un array diverso.
Se a rappresenta l'elemento nell'intervallo (first, last) eb rappresenta l'elemento nell'array risultante, partial_sum sarà:
b0 = a0
b1 = a0 + a1
b2 = a0 + a1 + a2… e così via.
Vediamo un esempio per dimostrare entrambi Queste funzioni in un programma:
#include #include using namespace std; int main() { int A() = {21,25,64,32}; int sum = 0; int b(4); cout<<'
Result of accumulate function is: '< Produzione:
Il risultato della funzione di accumulo è: 142
somma_parziale dell'array A: 21 46110142
Come mostrato nel programma sopra, prima calcoliamo la somma degli elementi usando la funzione accumulate e poi chiamiamo la funzione partial_sum per calcolare la somma parziale degli elementi dell'array corrispondenti.
Altri algoritmi supportati da STL e intestazione:
- iota: Riempie un intervallo con incrementi successivi del valore iniziale.
- ridurre: Simile ad accumulare, tranne che fuori servizio.
- prodotto interno: Calcola il prodotto interno di due gamme di elementi.
- adiacente_differenza: Calcola le differenze tra elementi adiacenti in un intervallo.
- inclusive_scan: Simile a partial_sum, include l'i esimo elemento di input nella iesima somma.
- exclusive_scan: Simile a partial_sum, esclude l'i esimo elemento di input dall'i esima somma.
Algoritmi non modificabili
Gli algoritmi non modificanti o non trasformanti sono quelli che non cambiano il contenuto del contenitore in cui stanno operando. STL supporta molti algoritmi non modificanti.
Ne abbiamo elencati alcuni di seguito:
- contare: Restituisce il numero di valori nell'intervallo specificato.
- pari: Confronta gli elementi in due intervalli e restituisce un valore booleano.
- mancata corrispondenza: Restituisce una coppia di iteratori quando vengono confrontati due iteratori e si verifica una mancata corrispondenza.
- ricerca: Cerca una data sequenza in un dato intervallo.
- search_n: Cerca in un dato intervallo una sequenza del valore di conteggio.
Elaboriamo di più sulle funzioni 'conteggio' e 'uguale' !!
count (first, last, value) restituisce il numero di volte in cui il 'valore' appare nell'intervallo (first, last).
#include #include using namespace std; int main () { int values() = {5,1,6,9,10,1,12,5,5,5,1,8,9,7,46}; int count_5 = count(values, values+15, 5); cout<<'The number of times '5' appears in array= '< Produzione:
Il numero di volte in cui '5' appare in una matrice = 4
Come puoi vedere in questo codice, definiamo un valore di matrice e quindi chiamiamo la funzione di conteggio fornendo l'intervallo di valore e il valore di 5. La funzione restituisce il numero di volte in cui (conteggio) il valore 5 appare nell'intervallo.
Facciamo un esempio per dimostrare la funzione 'uguale'.
equal (first1, last1, first2) confronta gli elementi nell'intervallo (first1, last1) con il primo elemento puntato da first2 e restituisce true se tutti gli elementi sono uguali, altrimenti false.
#include #include using namespace std; int main() { int inputs1() = { 1,2,3,4,5,6,7,8}; int inputs2() = { -1,2,1,2,3,4,6,7,8,9}; if (equal( inputs1 , inputs1+8 , inputs2 )==1) cout<<'Elements in Two ranges are equal'; else cout<<'Elements in two ranges are not equal'; }
Produzione:
Gli elementi in due intervalli non sono uguali.
Nel codice sopra, definiamo due array di interi e confrontiamo i loro elementi corrispondenti utilizzando la funzione 'uguale'. Poiché gli elementi dell'array non sono gli stessi, equal restituisce false.
Modifica degli algoritmi
Gli algoritmi di modifica modificano o trasformano il contenuto dei contenitori quando vengono eseguiti.
Gli algoritmi di modifica più popolari e ampiamente utilizzati includono 'swap' e 'reverse' che scambiano due valori e invertono rispettivamente gli elementi nel contenitore.
Vediamo gli esempi per queste funzioni:
#include #include #include #include using namespace std; int main () { vector vec1 = {1,1,2,3,5}; vector vec2 = {2,4,6,8,10}; swap(vec1,vec2); cout<<'Vector 1 : '; for (auto it = vec1.begin(); it < vec1.end(); ++it) cout << *it << ' '; cout< Produzione:
Vettore 1: 2 4 6 8 10
Vettore 2: 1 1 2 3 5
Vettore invertito 1:10 8 6 4 2
Vettore invertito 2: 5 3 2 1 1
Come visto, abbiamo due vettori definiti nel programma. Usando prima la funzione swap, scambiamo i contenuti di vector1 e vector2. Successivamente, invertiamo il contenuto di ciascun vettore utilizzando la funzione inversa.
Il programma restituisce Vector 1 e Vector 2 dopo aver scambiato i loro contenuti e anche dopo aver invertito i contenuti.
Operazioni minime e massime
Questa categoria è composta da funzioni min e max che individuano i valori minimo e massimo rispettivamente dai due valori dati.
La sintassi generale di queste funzioni è:
max(objecta, objectb); min(objecta, objectb);
Possiamo anche fornire un terzo parametro per fornire 'compare_function' o i criteri che verrebbero utilizzati per trovare il valore minimo / massimo. Se non viene fornito, la funzione max utilizza l'operatore '>' per il confronto mentre la funzione min utilizza '<’ operator for comparison.
Dimostriamo queste funzioni utilizzando un programma.
#include #include using namespace std; int main() { int x=4, y=5; cout<<'Max of 4 and 5 : '; cout << max(x,y); cout< Produzione:
Massimo di 4 e 5: 5
Minimo 4 e 5: 4
Max String: stringa più piccola
Stringa minima: stringa più lunga
qual è il miglior programma di aggiornamento del driver
Il programma sopra è autoesplicativo poiché usiamo le funzioni min e max prima sui numeri e poi sulle stringhe. Poiché non fornivamo 'compare_function' opzionale, le funzioni min / max agivano rispettivamente sugli operatori ''.
Conclusione
Con questo, siamo arrivati alla fine di questo tutorial sui principali algoritmi utilizzati in STL.
Nelle nostre esercitazioni successive, discuteremo in dettaglio gli iteratori insieme alle funzioni comuni utilizzate in STL indipendentemente dai contenitori.
=> Leggere la serie di formazione Easy C ++.
Lettura consigliata
- Array in STL
- Iteratori in STL
- Coda prioritaria in AWL
- Introduzione alla ricerca di algoritmi in C ++
- Stringhe, coppie e tuple in STL
- SET In STL
- 70+ MIGLIORI tutorial C ++ per imparare la programmazione C ++ GRATUITAMENTE
- Miglior serie di tutorial GRATUITI per C #: la guida definitiva a C # per principianti