Необычное поведение с авто при обходе динамического вектора

Я пересекаю вектор с авто (код прилагается). Во время обхода я также добавляю некоторые элементы сзади. Я не ожидал выхода, который я получил.

#include <iostream>
#include <vector>
using namespace std;

vector <int> dynamic_vector;

void access( )
{
    for ( auto i : dynamic_vector ) {
        if ( i == 3 ) {
            dynamic_vector.push_back( 4 );
            dynamic_vector.push_back( 5 );
        }
        cout << i << endl;
    }
}

int main() {
    dynamic_vector.push_back( 1 );
    dynamic_vector.push_back( 2 );
    dynamic_vector.push_back( 3 );
    access( );
    return 0;
}

Выход:

1
2
3

Я ожидал, что все цифры от 1 до 5 будут напечатаны. Я не могу понять, как работает обход с авто?

Ответы на вопрос(2)

Ваш ответ на вопрос