Um iterador possui um estado de iteração. Ele deve saber qual será o próximo elemento a fornecer.
Portanto, um vetor por si só não é um iterador, e a distinção é importante. Você pode ter dois iteradores sobre o mesmo vetor, por exemplo, cada um com seu estado de iteração específico.
Mas um vetor pode fornecer um iterador, é por isso que ele implementa IntoIterator, o que permite escrever isso:
let v = vec![1, 4];
for a in v {
dbg!(a);
}
Muitas funções ocorrem IntoIteratorquando um iterador é necessário, e é o caso disso zip, e é por isso que
let rx = xs.iter().zip(ys.iter());
pode ser substituído por
let rx = xs.iter().zip(ys);