Безопасно ли хранить список :: итератор для дальнейшего использования? - PullRequest
8 голосов
/ 08 мая 2009

Предположим, у меня есть список, в котором новые узлы не добавляются и не удаляются. Тем не менее, узлы могут быть перемешаны вокруг.

Безопасно ли сохранять итератор, указывающий на узел в списке, и обращаться к нему произвольно позже?

Изменить (следующий вопрос): В документации для list :: splice () говорится, что он удаляет элементы из списка аргументов. Означает ли это, что если я вызову splice, используя тот же список, что и аргументы функции, существующие итераторы будут признаны недействительными?

Ответы [ 2 ]

25 голосов
/ 08 мая 2009

Да.
Стандартные получатели грантов, которые итераторы в списке, не будут признаны недействительными, если элемент, на который они указывают (образно говоря), не будет удален из списка.

С этой страницы: http://www.sgi.com/tech/stl/List.html

Lists have the important property that insertion and splicing do not
invalidate iterators to list elements, and that even removal invalidates
only the iterators that point to the elements that are removed.
1 голос
/ 08 мая 2009

Да, std::list итераторы - это просто указатели на узел. Вы можете вставлять, удалять (другие узлы) и переставлять узлы в списке, и итератор не становится недействительным.

...