Следующий упрощенный код работает, поскольку он удаляет все элементы вектора. Однако я не понимаю, почему. Поскольку f.erase(r)
не фиксирует возвращаемое значение, которое было бы новым значением итератора, и нет другого инкремента итератора, и согласно документации, erase(iterator position)
аргумент не передается по ссылке, где итератор получает дополнительные возможности?
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> f = {1,2,3,4,5};
auto r = f.begin();
while (r != f.end())
{
std::cout << "Erasing " << *r << std::endl;
f.erase(r);
}
return 0;
}
clear()
->f.clear();
- person NathanOliver   schedule 25.10.2019erase
делает недействительными итераторы, поэтому после этого вы не должны использоватьr
. это работает, это худшее воплощение неопределенного поведения - person 463035818_is_not_a_number   schedule 25.10.2019