Вы можете представить себе этот диапазон на основе l oop
for (int i : vs) {
std::cout << "loop: " << i << std::endl;
vs1.emplace_back(i);
}
следующим образом
for ( auto first = vs.begin(); first != vs.end(); ++first )
{
int i = *first;
vs1.emplace_back(i);
}
, который находится в пределах l oop, с которым вы имеете дело переменная i, которая не будет жива после выхода из l oop.
Вам необходимо использовать ссылку на элементы вектора, такие как
for (int &i : vs) {
std::cout << "loop: " << i << std::endl;
vs1.emplace_back(i);
}