if iterator is empty and initial is set, the initial will be returned