Если я стерю все 5 элементов вектора во время первой итерации стандарта для l oop
std::vector<int> test {1, 2, 3, 4, 5};
for(int i = 0; i < test.size(); i++)
{
if(test[i] == 1) test.erase(test.begin(), test.end());
std::cout << i << " ";
}
, он будет повторяться только один раз, и вывод std :: cout будет равен '0'.
Однако, если я сделаю то же самое, используя l oop на основе диапазона, он будет повторяться 5 раз, несмотря на то, что все элементы вектора удалены.
int i = 0;
for (auto &a: test)
{
if (a==1) test.erase(test.begin(), test.end());
std::cout << i << " ";
i++;
}
И std: : выходной сигнал cout будет '0 1 2 3 4'.
Откуда происходит такое различное поведение при использовании этих двух типов циклов?