explain why need iterator traits