Non capisco bene come sono implementati gli iteratori come quelli std::vector e std::list, faccio un esempio:
A questo punto i in qualche modo, conosce la posizione del primo elemento del vettore.codice:list<string> l; list<string>::iterator i; i=l.begin();
Però non capisco come funziona: su c++ reference dice che ci sono due versioni, una che ritorna un iteratore costante (const_iterator begin() const), e una che ritorna un iteratore non costante (iterator begin()), però const_iterator non è veramente costante, lo posso incrementare e non mi da alcun errore:
Allora ho due domande:codice:list<string> l; list<string>::const_iterator i=l.begin(); i++; // non mi da errore di sintassi
-Qual'è la differenza tra usare un iteratore costante e non costante?
-Quando faccio un assegnamento (tipo i=l.begin()), viene creato un iteratore nuovo, se l' iteratore era già stato assegnato, quello vecchio viene distrutto?