Итераторы предназначены для использования.Они предназначены не только для зацикливания каждого элемента в цикле for.Все, что вы должны принять во внимание, это правила для аннулирования итераторов.
std::vector
итераторы могут быть аннулированы любой операцией, которая вставляет элементы в список.Итераторы для всех элементов за пределами точки вставки становятся недействительными, и все итераторы становятся недействительными, если операция вставки вызывает увеличение емкости.Операция, удаляющая элемент из вектора, лишит законной силы любой итератор после точки удаления.
std::deque
итераторы аннулируются любой операцией, которая добавляет или удаляет элементы из любой точки в очереди.Так что, вероятно, не очень хорошая идея хранить их очень долго. Итераторы
std::list
, std::set
и std::map
становятся недействительными только из-за конкретного удаления конкретного элемента, на который ссылается итератор.Это самые долгоживущие типы итераторов.
Пока вы помните эти правила, не стесняйтесь хранить эти итераторы сколько хотите.Разумеется, хранить итераторы std::list
неплохо, если вы уверены, что этот конкретный элемент никуда не денется.