Generalnie nie wiem po co tak robisz zakręt, mało wydajny.
Masz dwie łatwiejsze możliwości:
1. Iterując od tyłu, nadajesz pozycję, elementowi z przodu.
snake[0].move( getDirectionFromUserInput() );
for(int i = snake.size()-1; i>=1; i--)
snake[i].position = snake[i-1].position;
2. Za każdym razem, tworzysz nową głowę i usuwasz ostatni element.
snake.push_front( SnakePart( getPositionFromUserInput() ) );
snake.erase( snake.back() );