См. Связанные вопросы об аннулировании итератора прошлого: это , это .
Это больше вопрос проектирования, а именно существует ли (в STL или в другом месте) такое понятие, как итератор "конца конца" "повторная проверка" ?
Что я имею в виду под этим и случай использования: предположим, что алгоритму требуется«хвост» контейнера (например, очереди).Он пересекает контейнер, пока не будет достигнут end()
, затем останавливается;независимо от этого, другая часть программы ставит в очередь больше элементов в очереди.Как алгоритм может (РЕДАКТИРОВАТЬ) эффективно сказать, "было ли в очереди больше элементов", удерживая ранее завершенный итератор (назовите его tailIt
)?(это подразумевает, что он может проверить, если tailIt == container.end()
все еще, и если это неверно, заключите, что tailIt
теперь действителен и указывает на первый элемент, который был вставлен).
Пожалуйста, не отклоняйте вопрос как «нет, нет» - я стремлюсь сформировать суждение о том, как разработать некоторую логику идиоматическим образом и иметь много вариантов (на самом деле рассматриваемые итераторысозданная вручную структура данных, для которой я могу предоставить это свойство - end () revalidation - но я бы хотел судить, если это хорошая идея).
РЕДАКТИРОВАТЬ: дал понять, что у нас есть итератор tailIt
и ссылка на container
.Тривиальный обходной путь для того, что я пытаюсь сделать, - это также помните count
: = сколько предметов вы обработали, а затем проверьте, все еще ли container.size() == count
, и если нет, то найдите container[count]
и продолжите обработку оттуда.Это имеет много недостатков (дополнительное состояние, допущение, что контейнер не появляется спереди (!), Произвольный доступ для эффективного поиска).