Если все, что вам нужно, это значение элемента, следующего за максимумом, я бы сделал это простым вызовом fold
, отслеживая найденный максимум и соответствующее следующее значение:
fn main() {
let v = vec![1, 3, 2];
let nxt = v.iter().fold (
(None, None),
|acc, x| {
match acc {
(Some (max), _) if x > max => (Some (x), None),
(Some (max), None) => (Some (max), Some (x)),
(None, _) => (Some (x), None),
_ => acc
}
}
).1;
assert_eq!(Some(&2), nxt);
}
детская площадка
В зависимости от того, что вы хотите сделать с предметами, следующими за максимумом, подобный подход может позволить вам сделать это за один проход.