evaluate using iterators is better