2010-12-11 24 views
11

En un algoritmo que estoy implementando actualmente, lo que necesito para manipular un std :: lista de T. estructura T contiene una referencia a otra instancia de T, pero esta referencia también puede ser "sin asignar". Al principio, quería utilizar un puntero para contener esta referencia, pero usar un iterador en su lugar facilita su eliminación de la lista.iterador equivalente al puntero nulo?

Mi pregunta es: ¿cómo representar el equivalente al puntero nulo con mi iterador?

Leo la solución general es usar myList.end(), pero en mi caso, necesito probar si el iterador es "nulo" o no, y puedo agregar o quitar elementos a la lista entre el momento en que Guardo el iterador y el momento en que lo elimino de la lista ... ¿Debo hacer que el iterador apunte a una lista conocida que contenga el elemento "nulo"? ¿O hay una solución más elegante?

Respuesta

15

Según this (énfasis por mí):

En comparación con la otra secuencia de bases contenedores (vector y deque), enumera son el recipiente más eficiente haciendo inserciones en algún posición distinta de la principio o el final de la secuencia y, a diferencia de estos, todos los los iteradores previamente obtenidos y las referencias siguen siendo válidos después de la inserción y se refieren a la misma elementos a los que se referían anteriormente.

Lo mismo se aplica al borrado (con la obvia excepción de los iteradores que hacen referencia a la invalidación de un elemento eliminado). Entonces sí, obtener end() siempre apuntará al mismo elemento "inválido" y debería ser seguro de usar.

+0

Ok, ¡genial! Tenía la sensación de que end() sería una "excepción a la regla", y que representaría el siguiente elemento al que empujaría push_back en su lista ... – Mikarnage

+0

Nah, el STL es más inteligente que eso. :) – suszterpatt

+0

Tengo curiosidad: ¿Alguien sabe si eso también está en 'el estándar'? – sje397