你想要
ExactSizeIterator
具有
IntoIterator
:
fn get_middle<T, U>(elements: U) -> Option<T>
where
U: IntoIterator<Item = T>,
U::IntoIter: ExactSizeIterator,
{
let mut it = elements.into_iter();
let len = it.len();
it.nth(len / 2)
}
fn main() {
assert_eq!(get_middle(vec![1, 2, 3]), Some(2));
assert_eq!(get_middle(0..3), Some(1));
}
请注意
nth
如果迭代器的源支持它(例如,切片或范围),则实现为随机访问。