Bell wrote:
> Конечно. > Другое дело, что на практике наверняка результат erase и it1 будут совпадать. В частности, это справедливо, если итератор вектора — тайпдеф указателя. Если же итератор — "полноценный" класс, то на эту особенность полагаться совсем не стоит.
К тому времени, как vector::erase отработал, it1 уже невалидный итератор, поэтому сравнение его с чем угодно не имеет смысла.
-- Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[4]: может ли vector::erase(it1, it2)/erase(it1) вернуть н
Здравствуйте, MaximE, Вы писали:
>> Я спрашиваю не про sequence, а про std::vector.
ME>A vector is a Sequence. http://www.sgi.com/tech/stl/Vector.html
Я знаю. Я спрашиваю не про sequence, а про std::vector.
Правильно работающая программа — просто частный случай Undefined Behavior
может ли vector::erase(it1, it2)/erase(it1) вернуть не it1?
Конечно.
Другое дело, что на практике наверняка результат erase и it1 будут совпадать. В частности, это справедливо, если итератор вектора — тайпдеф указателя. Если же итератор — "полноценный" класс, то на эту особенность полагаться совсем не стоит.
Любите книгу — источник знаний (с) М.Горький
Re[3]: может ли vector::erase(it1, it2)/erase(it1) вернуть н
Здравствуйте, MaximE, Вы писали:
ME>К тому времени, как vector::erase отработал, it1 уже невалидный итератор, поэтому сравнение его с чем угодно не имеет смысла.
Почему невалидный? Разве erase может инвалидировать итератор?
Правильно работающая программа — просто частный случай Undefined Behavior
Re[4]: может ли vector::erase(it1, it2)/erase(it1) вернуть н
Здравствуйте, _Winnie, Вы писали:
_W>>Почему невалидный? Разве erase может инвалидировать итератор? _W>Уточню. std::vector<>::erase
Понял. формально по стандарту итераторы на все, что после стираемого элемента включительно(или не включительно? стандарта под рукой нет), инвалидируются. Так что формально it, наверное тоже инвалидирован. Вроде, ясно.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[3]: может ли vector::erase(it1, it2)/erase(it1) вернуть н
ME>К тому времени, как vector::erase отработал, it1 уже невалидный итератор, поэтому сравнение его с чем угодно не имеет смысла.
Так с этим никто не спорит. Просто в некоторых реализациях (когда итератор — это обычный указатель) переданное и возвращенное значения вполне могут совпадать. ИМХО это и побудило _Winnie задать этот вопрос. Я так понимаю, коллега пытается сэкономить на писанине:
вместо