Контекст
У меня есть собственный класс контейнера шаблонов, составленный из карты и вектора. Карта преобразовывает строку в порядковый номер, а вектор разрешает порядковый номер (только начальная строка для поиска по порядковому номеру, будущие ссылки на вектор) к записи. Записи изменяются навязчиво и содержат bool
«назначенный» и iterator_type, который является const_iterator для карты класса контейнера.
Мой контейнерный класс будет использовать код сериализации RCF (который моделирует boost :: serialization) для сериализации моих контейнерных классов на узлы в сети. Сериализация итераторов невозможна или червей, и я могу легко восстановить их, когда векторы и карты сериализуются на удаленном сайте.
Вопрос
Мне нужно выполнить инициализацию по умолчанию и иметь возможность проверить, что итератор не был назначен (если он назначен, он действителен, если нет, он недействителен). Поскольку итераторы карты не становятся недействительными при выполнении операций над ними (если, конечно, элементы не удаляются: D) я могу предположить, что map<x,y>::end()
является действительным стражем (независимо от состояния карты - то есть она может быть пустой) инициализировать в?
У меня всегда будет доступ к родительской карте, я просто не уверен, что end()
совпадает с изменением содержимого карты.
Я не хочу использовать другой уровень косвенности (--ie, boost :: option) для достижения своей цели, я бы предпочел отказаться от проверок компилятором для исправления логики, но было бы неплохо, если бы я этого не сделал надо.
Разное
Этот вопрос существует , но большая часть его содержания кажется бессмысленной. Присвоение NULL итератору недопустимо в соответствии с g ++ и clang ++.
Это еще один аналогичный вопрос, но он сосредоточен на общих случаях использования итераторов, которые обычно используют итератор для итерации, конечно, в этом случае состояние контейнера не не должно меняться во время итерации.