vinz Amministratore


Registrato: 12/12/03 12:56 Messaggi: 6648 Residenza: San Pellegrino Terme (Bergamo)
|
Inviato: Dom Giu 18, 2006 1:01 pm Oggetto: Strano comportamento di C++ e iteratori |
|
|
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 |
|