Vec<T> is Rust's dynamic array, stored on the heap. It grows as needed, amortizing allocations. I use Vec for collections of owned data, return values, and when you don't know the size upfront. Common methods: .push() appends, .pop() removes the last element, .len() gives the count. Indexing (vec[i]) panics on out-of-bounds; use .get(i) for Option. Vecs own their data, so they're moved or cloned as needed. For iteration, .iter() borrows, .into_iter() consumes. Capacity (.capacity()) is the allocated size; use .reserve() to preallocate. Vec is the most common collection in Rust and has excellent performance when used correctly.