Separate names with a comma.
Вообще-то после cin >> str; считывание остается на той же строке, поэтому для получения следующей строки необходимо считать из потока символ...
Нет, здесь просто используется ссылка на int&. Ничего особенного в этом коде я не вижу, в стандартных классах это сплошь и рядом...