Подтвердить что ты не робот

Итератор эквивалентен нулевому указателю?

В алгоритме, который я сейчас реализую, мне нужно манипулировать std:: list структуры T. T содержит ссылку на другой экземпляр T, но эта ссылка также может быть "неназначенной". Сначала я хотел использовать указатель для хранения этой ссылки, но вместо этого использование итератора упрощает удаление из списка.

Мой вопрос: как представить эквивалент нулевому указателю с моим итератором?

Я читал общее решение - использовать myList.end(), но в моем случае мне нужно проверить, является ли итератор "нулевым" или нет, и я могу добавлять или удалять элементы в список между моментом, когда я хранить итератор и момент, когда я удаляю его из списка... Должен ли я сделать итератор точкой с известным списком, содержащим элемент "null"? Или есть более элегантное решение?

4b9b3361

Ответ 1

В соответствии с этим (выделение мной):

По сравнению с другой базой контейнеры (вектор и дека), списки являются наиболее эффективным контейнером вставки в каком-либо положении, кроме начало или конец последовательности и, в отличие от них, всех ранее полученные итераторы и ссылки остаются в силе после вставлять и ссылаться на то же самое элементы, к которым они ссылались раньше.

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