Per utilizzare le librerie vettoriali e algoritmo, il programma C ++ dovrebbe iniziare con:
#includereQuesto tutorial fornisce le basi di trovare un valore in un vettore C ++. Tutto il codice in questo tutorial è nella funzione principale (), se non diversamente indicato. Se il vettore è costituito da stringhe, utilizzare la classe String; e non usare "const char*". In questo caso, anche la classe di stringhe deve essere inclusa, come così:
#includereContenuto dell'articolo
Trovare
InputIterator Find (inputIterator First, inputIterator Last, const t & value);
Il seguente codice utilizza questa funzione per sapere se il fiore, "flusso di mais" è tra un elenco vettoriale di fiori:
#includereL'output è:
Fiore trovato all'indice: 5L'intero elenco del vettore è stato l'obiettivo della scoperta. Dalla sintassi della funzione Find (), "First" è VTR.inizio () nel codice e "ultimo" è VTR.end () nel codice. Il valore da cercare dalla sintassi della funzione Find () indicata da const-T & -Value, è "flotta di mais" nel codice.
La funzione find () scansiona l'elenco vettoriale dall'inizio. Se non vede il valore che sta cercando, raggiungerà la fine del vettore. La fine del vettore è ufficialmente VTR.end (), che è appena oltre l'ultimo elemento. Se non vede il valore che sta cercando, restituirà l'iteratore che punta a VTR.FINE().
Il valore che sta cercando può essere in luoghi diversi nello stesso vettore. Quando vede il primo dei valori che sta cercando, si ferma lì e restituisce l'iteratore che punta a quel valore.
Ogni valore in un vettore ha un indice. Il primo valore ha l'indice 0, corrispondente a VTR.inizio(). Il secondo valore ha l'indice 1, corrispondente a VTR.inizio () + 1. Il terzo valore ha l'indice 2, corrispondente a VTR.inizio () + 2. Il quarto valore ha l'indice 3, corrispondente a VTR.inizio () + 3; e così via. Quindi, l'indice del primo valore trovato è dato da:
IT - VTR.inizio()Sensibilità al caso
Trovare in un vettore è sensibile al caso. Se il valore da trovare fosse "flusso di corn" per il programma di cui sopra, non sarebbe stato trovato e VTR.la fine () sarebbe stata restituita.
Intervallo entro limiti
La gamma non deve necessariamente essere l'intero vettore. Per il programma di cui sopra, l'intervallo avrebbe potuto essere dall'indice 1 all'indice 4. Cioè da "vtr.Inizia () + 1 "a" VTR.end () - 4 ". “VTR.end () - 4 "è ottenuto sottraendo dalla parte posteriore, tenendo presente quel VTR.end () è appena oltre l'ultimo elemento.
Quando l'intero elenco vettoriale è l'intervallo, testare se l'iteratore di restituzione è VTR.fine () indica se il valore è stato trovato o meno. Se l'iteratore di ritorno è VTR.fine (), significa che il valore non è stato trovato. Ora, quando l'intervallo è più piccolo, se l'iteratore di ritorno è l'ultimo elemento dell'intervallo scelto, significa che il valore non è stato trovato o è l'ultimo valore dell'intervallo.
Nota: La ricerca si ferma all'ultimo elemento dell'intervallo scelto (più piccolo), se il valore non è stato trovato in quell'intervallo, o se il valore trovato, è l'ultimo elemento dell'intervallo scelto. Se il valore trovato fosse quell'ultimo elemento, un iteratore che punta ad esso sarebbe stato restituito. Se il valore fosse stato trovato prima, la ricerca si fermerebbe a quell'elemento prima dell'ultimo elemento dell'intervallo scelto. L'iteratore di quell'elemento prima sarebbe stato restituito.
Il seguente codice illustra questo schema:
#includereL'output è:
Il fiore non è stato trovato nella gamma!Ora, "Cornflower" è all'indice 5 e "Kingcup" è all'indice 4. L'ultimo elemento nella piccola gamma scelta per la ricerca è "Kingcup". Quindi, la condizione di test corrispondente è “It - VTR.inizio () == 4 ". Si noti che le espressioni, “VTR.end () - 4 "e" it - vtr.inizio () == 4 "ciascuno con 4, è solo una coincidenza.
Per avere un "flusso di mais" nella piccola gamma di ricerca, la condizione di test corrispondente dovrà essere “It - VTR.inizio () == 5 ". Il seguente codice illustra questo:
#includereL'output è:
Fiore trovato all'indice: 5Più di un evento
Nel seguente programma, il "flusso di mais" si verifica in più di un posto. Per trovare tutti gli indici delle occorrenze, utilizzare un ciclo while per continuare la ricerca, dopo la precedente occorrenza, fino alla fine (VTR.fine ()) del vettore. Il programma è:
#includereL'output è:
Fiore trovato all'indice: 1Trovare intero
Un vettore può essere costituito da numeri interi. È possibile trovare un primo valore intero utilizzando la funzione find () (dalla libreria dell'algoritmo). Il seguente programma illustra questo:
#includereL'output è:
Numero trovato all'indice: 2Predicato
InputIterator find_if (inputIterator prima, inputterator ultimo, predicato pred);
La funzione qui è find_if () e non solo trovare (). PRED è il nome della funzione che fornisce i criteri di ricerca. Questo terzo argomento prende solo il nome della funzione, senza argomenti e senza parentesi. Se la funzione predicato prende argomento, allora nella definizione della funzione, vengono forniti i parametri per gli argomenti. Il seguente programma lo illustra, alla ricerca del primo numero pari nell'elenco vettoriale:
#includereL'output è:
Numero trovato all'indice: 4Si noti che l'intero vettore è stato cercato, con l'intervallo "VTR.inizio (), vtr.FINE()".
Il nome della funzione predicato qui è, fn. Ci vuole una discussione, n un int. Poiché la funzione find_if () inizia a scansionare il vettore dal primo elemento, chiama la funzione predicato con ciascun numero nel vettore come argomento. La scansione si interrompe quando raggiunge il primo elemento nel vettore in cui il predicato restituisce vero.
Conclusione
La funzione Find () nella libreria dell'algoritmo esiste in quattro categorie, che sono: trovare, trovare fine, trovare prima e adiacente. Solo la categoria, la scoperta è stata spiegata sopra e in larga misura. La spiegazione sopra indicata sono le basi per tutte le funzioni di ricerca () nella libreria dell'algoritmo. Trova () le funzioni si occupano direttamente degli iteratori e gestiscono indirettamente gli indici. Il programmatore deve sapere come convertire l'iteratore in indicizzazione e aritmetica generale iterator come illustrato sopra.