c++ - vectors - Come verificare se l'iteratore STL punti a qualcosa?




vector c++ wiki (3)

Non puoi Il solito idioma è usare l'iteratore finale del contenitore come un indicatore "non trovato". Questo è ciò che std::find restituisce.

std::vector<int>::iterator i = std::find(v.begin(), v.end(), 13);
if (i != v.end())
{
     // ...
}

L'unica cosa che puoi fare con un iteratore non assegnato è assegnargli un valore.

https://code.i-harness.com

Possibile duplicato:
C ++ Il modo migliore per verificare se un iteratore è valido

Voglio fare qualcosa del genere:

std::vector<int>::iterator it;
// /cut/ search for something in vector and point iterator at it. 
if(!it) //check whether found
    do_something(); 

Ma non c'è operatore! per gli iteratori. Come posso verificare se l'iteratore punta a qualcosa?


Sebbene gli iteratori siano considerati come una forma generale di indicatori, non sono esattamente i puntatori. Lo standard definisce iteratore Past-the-end per indicare l'errore di ricerca nei contenitori. Quindi, non è consigliabile controllare gli iteratori per NULL

Past-the-end valori Past-the-end sono non singolari e nondereferenceable.

if(it != aVector.end())  //past-the-end iterator
    do_something();

Se si desidera utilizzare iteratore in un ciclo, il modo più sicuro per utilizzarlo è in questo modo:

for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
 do_smth();
}






iterator