Проверка допустимости итератора - PullRequest
61 голосов
/ 14 января 2010

Есть ли способ проверить, является ли (по-прежнему) разыменовываемым ли итератор (является ли он вектором, списком, декой ...), то есть не был ли он признан недействительным?

Я использовал try - catch, но есть ли более прямой способ сделать это?

Пример: (который не работает)

list<int> l;
for (i = 1; i<10; i++) {
    l.push_back(i * 10);
}

itd = l.begin();
itd++;
if (something) {
    l.erase(itd);
}

/* now, in other place.. check if itd points to somewhere meaningful */
if (itd != l.end())
{
    //  blablabla
}

Ответы [ 11 ]

0 голосов
/ 14 января 2010
if (iterator != container.end()) {
   iterator is dereferencable !
}

Если ваш итератор не равен container.end() и не может быть разыменован, значит, вы делаете что-то не так.

...