Hay muchas razones para estas decisiones. Como señalaron otros, la implementación más básica de iterator
para un vector es un indicador simple del elemento. Para poder manejar iteradores push_back
tendría que modificarse para manejar un puntero en el vector y una posición, en el acceso a través del operador, el puntero del vector debería ser desreferenciado, el puntero a los datos obtenidos y la posición añadida, con una desreferencia adicional.
Si bien esa no sería la implementación más eficiente, no es realmente un factor limitante. La implementación predeterminada de los iteradores en las bibliotecas de VS/Dinkumware (incluso en versión) son iteradores verificados, que administran una cantidad equivalente de información.
El problema real viene con otras operaciones de mutación. Considere insertar/borrar en el medio del vector. Para mantener la validez de todos los iteradores, el contenedor tendría que rastrear todas las instancias de los iteradores y adaptar el campo de posición para que sigan refiriéndose al mismo elemento (que ha sido desplazado por la inserción/eliminación).
+1 buena pregunta. – Nawaz
@Nawaz: ¡Gracias! :) – Mehrdad
Cada vez que inserte en cualquier lugar menos el final o la clasificación, etc., deberá cambiar todos los desplazamientos. –