È possibile eseguire normali calcoli con iteratori, ad esempio incrementarlo aggiungendo un numero?Posso incrementare un iteratore semplicemente aggiungendo un numero?
Per fare un esempio, se voglio rimuovere l'elemento vec[3]
, posso solo fare questo:
std::vector<int> vec;
for(int i = 0; i < 5; ++i){
vec.push_back(i);
}
vec.erase(vec.begin() + 3); // removes vec[3] element
Funziona per me (g ++), ma non sono sicuro se è garantito lavorare.
Oh, quindi non funzionerebbe per std :: list? – Frank
corretto; aggiunti alcuni collegamenti alla documentazione che elencano quali funzioni dovrebbero essere disponibili per i tipi di iteratori. –
No, non è così. L'operatore + significa "in un passo, salta così avanti" che un iteratore di elenchi non può fare. I supporter iteratori avanti non iterativi dell'accesso (come gli iteratori di elenchi) supportano solo l'operatore di incremento (++) per far avanzare un elemento alla volta. Come ha detto Todd, è possibile utilizzare std :: advance, che richiama ripetutamente l'operatore ++, per esprimere in modo succinto l'idea di spostare un iteratore non casuale in avanti di un numero di passaggi. –