"...pero en vez de eso me imprime 19 1, porque?..."
Te planteo el siguiente ejemplo: la persona A le dice a B que vive en la casa C, pero luego A se va a vivir al sitio D pero no le dice a B la nueva direccion, luego B necesita algo de A y lo va a buscar donde sabe (donde cree saber) que vive A que es la casa C: obviamente puede llamar y puede entrar pero dentro no encuentra A sino que encuentra algo parecido pero que no es A.
Si accedes directamente por posiciones (debido al funcionemiento interno de los vectores, que reservan memoria incluso estando vacios) no te dara error ("...creo que deberia darme fallo de segmentacion por buscar posiciones que no existe...") porque estas accediendo a posiciones de memoria reservada por el objeto vector pero que contienen datos basura. Esto sucede porque vas a buscar a B al sitio C cuando ese ha cambiado de casa ok? Luego, como hago para saber que el vector esta vacio? Facil, usa las funciones propias del vector:
Código:
int main() {
vector<int> r;
r.push_back(19);
r.push_back(1);
r.clear();
//ojo, aqui sigui existiendo la posicion r[0], r[1]
vector <int>::iterator itr;
for(itr = r.begin(); itr < r.end(); itr++) {
printf("%d", itr);
}
}
return 0;
}
Puedes buscar mas informacion acerca de como funcionan los vectores (si te interesa es un tema muy apasionante), que son los datapools y como manipular bloques de memoria extra para tus aplicaciones.
Saludos
vosk