La propriété
Ces exercices portent sur la liaison et le déplacement (move), les emprunts
partagés (&) et mutables (&mut) et le déréférencement (*). Faites-les dans
l'ordre.
Somme sans consommer
Calculer la somme des éléments d'un vecteur sans en prendre la propriété : après l'appel, le vecteur doit toujours être utilisable par l'appelant.
- Objectif :
&[i32]en argument,forsur des références. - Signature suggérée :
fn somme(v: &[i32]) -> i32. - Cas de test :
somme(&vec![1, 2, 3, 4])->10,somme(&[])->0.
Doubler en place
Multiplier par 2 chaque élément d'un vecteur, en le modifiant sur place.
- Objectif :
&mut [i32],for x in v.iter_mut(),*x. - Signature suggérée :
fn doubler(v: &mut [i32]). - Cas de test : après
doubler(&mut v)avecv = [1, 2, 3],v == [2, 4, 6].
Échanger deux entiers
Échanger les valeurs pointées par deux références mutables, sans utiliser
std::mem::swap.
- Objectif :
&mut i32, déréférencement*, variable temporaire. - Signature suggérée :
fn echanger(a: &mut i32, b: &mut i32). - Cas de test : après
echanger(&mut x, &mut y)avecx = 1, y = 2, on ax == 2 && y == 1.
Corriger le code
On te donne un extrait qui ne compile pas : une valeur y est utilisée après
avoir été déplacée. Corrige-le sans supprimer de ligne (indice : un emprunt,
ou un .clone()).
- Objectif : lire un message d'erreur du borrow checker, choisir entre
&et.clone(). - Signature suggérée : -
- Cas de test : le code compile et affiche deux fois la même valeur.
Compter les pairs
Compter combien d'éléments d'un vecteur sont pairs, sans consommer le vecteur.
- Objectif :
&[i32],for,%, compteurmut. - Signature suggérée :
fn nb_pairs(v: &[i32]) -> usize. - Cas de test :
nb_pairs(&[1, 2, 3, 4, 6])->3,nb_pairs(&[1, 3, 5])->0.