ваш второй v1.assign(10,50);
в основном сбрасывает вектор, дающий 10 раз 50, затем вы добавляете 22, дающий вектор длины 11, затем вы стираете 1 элемент, дающий вектор длины 10
перед вашим циклом:
for (int i=0;i<11;i++)
cout << v1[i] << " ";
обращается к вектору вне пределов, давая вам любое значение, которое находится в памяти рядом с вектором.
зацикливает вектор, подобный этому, чтобы предотвратить такие ошибки:
for (const auto& element : v1)
{
cout << element << " ";
}