use auto instead of concrete iterator