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 iteradorend()
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?