El problema de los corchetes es que si el índice no existe, el contenedor puede añadirlo automáticamente al hacer la consulta ( en los mapas al menos es así ).
Bueno los maps es otra liga, en el vector no pasa eso.
Pero tampoco controla el indice que le metes, lo cual puede ser bueno si quieres máxima eficiciencia pero por otro lado...
Después de este error, he perdido mi confianza en los []
![;D](https://foro.elhacker.net/Smileys/chef/grin.gif)
Una opción es usar, como has comentado, el método "at", que es de solo lectura. El problema es que te obliga a controlar las excepciones y en algunos entornos está mal visto.
No sé porque la gente odia tanto las excepciones de verdad, es una magnifica forma de depurar.
Pones throw "mensaje" en potenciales errores (archivo no encontrado, entrada invalida...) y envuelves las llamadas a las funciones con un try/catch. Si cualquiera de esas funciones tienen algún error, lo sabras enseguida, sin tener que comprobar funcion por función.
El segundo método es lanzar un find para saber si posee ese índice ( en el caso de los vectores se puede hacer con size acordándose de controlar números negativos ) y, si el índice existe entonces recuperar el valor asociado.
A ver si te sigo... ¿Algo así?
map<int,int> Ejemplo;
//...
auto it = Ejemplo.find(4);
if (it != Ejemplo.end()) cout<<it->second<<endl;
else cout<<"No encontrado"<<endl;
No esta mal ^^