Rust の Vec<T> 、ヒープにあるというのと可変長というのが特徴で、逆にそれらの特徴を必要としない操作 (探索、並べ替え、要素アクセスなどなど) は全部 Deref 経由で &[T] の操作を使うことになっているので、それを知っていると覚えることが減って楽になれる
&Vec<T> からイテレータを作ると &[T] から作るイテレータ (std::slice::Iter<'_, T>) が返されるとか
https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#impl-Index%3CI%3E
一応 Index trait とかは Vec<T> そのものに対して定義されている (中身はリダイレクトされてるけど) ので、微妙に嘘吐いてる気がしてきた……
まあそれを言ったら std::slice::Iter を返す &Vec<T> のイテレータも IntoIterator for &Vec<T> で実装されてるので、 trait というのはそういうものなんだけど……
ここで「アクセス」で想定していたのは vec.get(i) とかですね (Vec::<T>::get は存在しなくて deref 経由で <&[T]>::get が利用される)
Coercions - The Rustonomicon
https://doc.rust-lang.org/nomicon/coercions.html
trait を Deref 任せにしないのは、 deref coercion が trait bound で型をマッチする場合に利用されないからという理由がある (はず)