https://www.geeksforgeeks.org/iterator-pattern/