2010-11-22 21 views
6

ho un codice come questo ....Come cercare un elemento in un vettore?

std::vector<string>::iterator p; 
p = find(v.begin(),v.end(),"asdasda"); 
cout << *p << endl; 

se "asdasda" non è una parte del vettore, p punta ad alcuni spazzatura e cout dà un guasto seg. quale dovrebbe essere la dichiarazione if che farebbe eseguire il cout onlyif "asdasda" è stato trovato? e anche la posizione di "asdasda" in v .. come se avessimo precedentemente dichiarato v [3] come "asdasda", allora come posso sapere dal ritrovamento che v [3] è "asdasda"?

risposta

12

p non punta a "garbage", diventa semplicemente v.end() quando il contenuto non viene trovato.

if (p != v.end()) { 
    std::cout << "v[" << (p - v.begin()) << "] = "; 
    std::cout << *p << std::endl; 
} 
+0

come trovare la posizione di "asdasda" in v .. come se avessimo precedentemente dichiarato v [3] come "asdasda", allora come posso sapere dal ritrovamento che v [3] è "asdasda"? –

+0

@Prasanth: vedere la seconda riga del mio codice. – kennytm

+0

@ kenny: grazie .... è v.begin() ..: P –

4

Se std::find non trova nulla, l'iteratore è impostato su v.end() in questo caso.

if (p != v.end()) 
{ 
    // iterator is good 
} 

Si noti inoltre il caso generale di std::find.

Ecco una definizione tipica di esso:

namespace std { 
    template <class InputIterator, class T> 
    InputIterator find(InputIterator start, 
        InputIterator finish, 
        const T& value); 
} 

In caso std::find fallisce, verrà restituito il finish iteratore perché la ricerca è [start, finish) e comprende start ma esclude finish.

1

Trova restituisce l'iteratore finale se non trova il valore che si cerca. È possibile evitare il proprio errore aggiungendo if (p != v.end()) subito prima della linea di visualizzazione.

+0

come trovare la posizione di "asdasda" in v .. come se avessimo precedentemente dichiarato v [ 3] come "asdasda", allora come posso sapere dal ritrovamento che v [3] è "asdasda"? –

+0

'p - v.start()', se 'p! = V.end()'. – Flinsch

Problemi correlati