que patron iteradores iterador implementar gof ejemplos diseño c++ iterator

iteradores - patron de diseño iterator c++



Finalizar reglas de invalidación de iterador (1)

Por ejemplo, 23.1 / 10:

ninguna función swap() invalida las referencias, los punteros o los iteradores que se refieren a los elementos de los contenedores que se intercambian. [Nota: el iterador end() no hace referencia a ningún elemento, por lo que puede ser invalidado. "Nota final"

No sé si podemos estar seguros de que el iterador que se refiere a un elemento se ha usado de manera consistente en la Norma para excluir a los iteradores finales: /

Como se dijo en un comentario, supongo que esto es para permitir que los iteradores finales apunten a valores centinela dentro del contenedor.

Por ejemplo, una implementación típica de la List doblemente vinculada es crear una estructura de Node y tener un Node por valor dentro de la List para que actúe como el nodo final.

Con respecto a esta pregunta sobre las reglas de invalidación de iteradores , parece obvio que el espíritu de la norma significa, por ejemplo, que "un borrado en medio del deque invalida todos los iteradores y las referencias a los elementos del deque" también se refiere al iterador final. .

Sin embargo, no puedo encontrar en ningún lugar que el estándar lo haga explícito, y estrictamente hablando, el iterador final no es un iterador de un elemento en el contenedor.

¿El estándar de 2003 aclara esto en alguna parte?