Torna in homepage www.vincenzomanzoni.com
Homepage personale e blog di Vincenzo Manzoni
 
 FAQFAQ   CercaCerca   Cerca con GoogleCerca con Google   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati   Feed AtomFeed
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

Strano comportamento di C++ e iteratori

 
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> Men at work
Precedente :: Successivo  
Autore Messaggio
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Dom Giu 18, 2006 1:01 pm    Oggetto: Strano comportamento di C++ e iteratori Rispondi citando

Mentre provavo un po' le STL per l'esame di domani, mi sono imbattutto in uno strano problema.

Il testo dell'esercizio esplicativo potrebbe essere: riempire un vettore vector con 5 elementi e stamparli prima dal primo all'ultimo e poi viceversa.

La soluzione che mi è venuta in mente è questa:
Codice:
   vector <int> v;
   for(int i = 0; i < 5; i++) {
      v.push_back(i);
   }
   
   for(vector<int>::const_iterator i = v.begin(); i != v.end(); i++) {
      cout << *i << endl;
   }
   
   for(vector<int>::const_reverse_iterator i = v.rbegin(); i != v.rend(); i++) {
      cout << *i << endl;
   }

Sembrerebbe che vada tutto bene... ed invece no! Purtroppo, per un motivo che non ho ben capito (qui se ne parla) mentre const_iterator è un iterator, e quindi può essere confrontato con v.end() (funzione che ritorna un iteratore), const_reverse_iterator non è un reverse_iterator e quindi non può essere confrontato con la funzione v.rend().

La soluzione che si propone sul link che ho segnato è un cast esplicito, in questo modo:
Codice:
for(vector<int>::const_reverse_iterator i = v.rbegin();
      i != vector<int>::const_reverse_iterator (v.rend()); i++) {
      cout << *i << endl;
   }

_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> Men at work Tutti i fusi orari sono GMT 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it