added iterator_reduce