Поведение setw(). Откуда берутся начальные отступы, начиная со 2 строки?

Потому что это не равнозначные замены. Когда используется std::endl, предшествующий ему вызов std::setw не учитывается при переводе строки, а будет использован при следующем выводе числа (21, 31, 41 ... ). Если же использовать "\n", то std::setw используется для перевода строки, а для чисел (21, 31, 41 ...) уже нет.

Чтобы лучше понять это, попробуйте добавить

до вызова цикла.