Как сделать недействительным итератор? - PullRequest
2 голосов
/ 06 декабря 2010

Поскольку я знаю, что итератор в программе может быть признан недействительным в результате какой-либо предыдущей операции, я хочу сделать его недействительным явноНапример, присвоить NULL указатель, чтобы сделать его недействительным, я просто хочу сделать то же самое на итераторе.container.end() не может быть точной идеей здесь.Я пытался присвоить NULL моему итератору, но это не удалось.Как я могу получить такое же поведение указателя NULL на итераторе?

Ответы [ 4 ]

4 голосов
/ 06 декабря 2010

может быть признано недействительным при выполнении какой-либо предыдущей операции, я хочу сделать его недействительным явно

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

2 голосов
/ 06 декабря 2010

Почему вы не хотите использовать container.end()? ... это работает для большинства контейнеров ...

Для std :: string Вы можете проверить, находится ли позиция yourstring.npos;

1 голос
/ 06 декабря 2010

Разве это не должно всегда работать? (итераторы всегда назначаются и конструируются по умолчанию)

template <typename Iter>
void foo(Iter it){
  it = Iter(); // invalidate
}
1 голос
/ 06 декабря 2010

Вы не можете, в общем. Есть некоторые итераторы, которые вообще нельзя аннулировать. Например, генератор случайных чисел может быть смоделирован как выходной итератор: operator* возвращает текущее число и operator++ генерирует новое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...