読み取り用に借りている間は、書き換え用に借りられません。
出るコード
let mut v = vec![1, 2, 3];
let first = &v[0]; // 不変借用
v.push(4); // 借用中に書き換え
println!("{}", first);
エラーメッセージ
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
直し方
不変借用(first)を使い終えてから push します。処理の順序を入れ替えます。