Copie/clonage idiomatique d'un vecteur dans une fonction paramétrée en Rust
Bonjour ! J'ai récemment commencé à apprendre Rust et j'ai rencontré un problème en travaillant avec des vecteurs dans des fonctions génériques. J'ai une fonction qui prend un vecteur et doit retourner une copie de celui-ci avec quelques modifications. Mais je n'arrive pas à comprendre comment copier correctement un vecteur à l'intérieur de la fonction lorsque le type des éléments est générique.
Voici un exemple qui ne compile pas :
```rust
fn duplicate_vector(vec: Vec) -> Vec {
let mut new_vec = vec.clone(); // erreur : T n'implémente pas Clone
new_vec.push(/* quelque chose */);
new_vec
}
```
Le compilateur se plaint que `T` n'implémente pas le trait `Clone`. Je comprends qu'il faut ajouter une contrainte `Clone` pour le type `T`, mais cela semble une solution peu flexible. Et si je veux copier seulement certains éléments ou ne pas exiger `Clone` pour tous les types possibles ?
J'ai aussi essayé d'utiliser `vec.to_vec()` et `vec.iter().cloned().collect()`, mais ils nécessitent aussi `Clone`. Existe-t-il un moyen de le faire sans la contrainte `Clone` ? Ou est-ce la seule solution ?