Planeo implementar una lista de cosas en C++ donde los elementos pueden ser eliminados fuera de orden. No espero que necesite ningún tipo de acceso aleatorio (solo necesito barrer la lista periódicamente), y el orden de los artículos tampoco es importante.¿Cuál es el tiempo de vida y la validez de los iteradores de C++?
Así que pensé en std::list<Thing*> with this->position = insert(lst.end(), thing)
debería hacer el truco. Me gustaría que la clase Thing recuerde la posición de cada instancia para poder hacer más fácilmente lst.erase(this->position)
en tiempo constante.
Sin embargo, todavía soy un poco nuevo en los contenedores C++ STL, y no sé si es seguro mantener los iteradores durante tanto tiempo. Especialmente, dado que habrá otros elementos eliminados adelante y después de la cosa insertada antes de que desaparezca.
Una buena respuesta, también ayudaría a saber qué razones pueden causar la reasignación de un vector. (insertar un elemento es obvio, pero ¿hay otros?) – Malabarba
Cualquier modificación del vector (tanto de inserción como de eliminación) tiene permiso para reasignar e invalidar iteradores; si uno lo hace o no está definido por la implementación. Así que es mejor que asumas que modificar un vector de cualquier forma siempre invalida todos los iteradores existentes. – Miral