Конструкция for (auto& v : arr) означает, что на каждой итерации цикла переменная v будет являться ссылкой на очередной элемент вектора arr: на первой итерации v - ссылка на arr[0], на второй итерации - на arr[1] и т.д. - пока не будут обработаны все элементы arr.
Тут нет никакой "несуществующей переменной", т.к. auto (и не только в заголовке цикла for) - это и есть создание переменной с автоматическим выводом её типа (тип переменной определяется типом инициализирующего переменную значения). Точно так же можно было написать:
for (int &v : arr)
Числа вводятся не "через пробел", а через любое кол-во пробельных символов: пробелов, табуляций, переводов строк и т.д. Детали работы ввода определяются стандартом C++.
Такая схема ввода чисел (не строк) используется во множестве языков программирования. Но она же создаёт проблемы, когда вперемешку вводятся числа и строки.