¿Puedo hacer cálculos normales con iteradores, es decir, simplemente incrementarlo agregando un número?¿Puedo incrementar un iterador simplemente agregando un número?
A modo de ejemplo, si quiero retirar el elemento vec[3]
, ¿puedo hacer esto:
std::vector<int> vec;
for(int i = 0; i < 5; ++i){
vec.push_back(i);
}
vec.erase(vec.begin() + 3); // removes vec[3] element
Funciona para mí (g ++), pero no estoy seguro de si es garantizado trabajar.
Oh, ¿entonces no funcionaría para std :: list? – Frank
Correcto; agregó algunos enlaces de documentación que enumeran qué funciones deberían estar disponibles para qué tipos de iteradores. –
No, no es así. El operador + significa "en un paso, salta tan adelante" que un iterador de lista no puede hacer. Los iteradores de acceso directo no aleatorio (como los iteradores de lista) solo admiten el operador de incremento (++) para avanzar un elemento a la vez. Como dijo Todd, puede usar std :: advance, que invoca al operador ++ repetidamente, para expresar de manera sucinta la idea de mover un iterador no aleatorio hacia adelante en una serie de pasos. –