# Module collections::vec [−] [src]

A growable list type with heap-allocated contents, written `Vec<T>` but pronounced 'vector.'

Vectors have `O(1)` indexing, amortized `O(1)` push (to the end) and `O(1)` pop (from the end).

# Examples

You can explicitly create a `Vec<T>` with `new()`:

fn main() { let v: Vec<i32> = Vec::new(); }
`let v: Vec<i32> = Vec::new();`

...or by using the `vec!` macro:

fn main() { let v: Vec<i32> = vec![]; let v = vec![1, 2, 3, 4, 5]; let v = vec![0; 10]; // ten zeroes }
```let v: Vec<i32> = vec![];

let v = vec![1, 2, 3, 4, 5];

let v = vec![0; 10]; // ten zeroes```

You can `push` values onto the end of a vector (which will grow the vector as needed):

fn main() { let mut v = vec![1, 2]; v.push(3); }
```let mut v = vec![1, 2];

v.push(3);```

Popping values works in much the same way:

fn main() { let mut v = vec![1, 2]; let two = v.pop(); }
```let mut v = vec![1, 2];

let two = v.pop();```

Vectors also support indexing (through the `Index` and `IndexMut` traits):

fn main() { let mut v = vec![1, 2, 3]; let three = v; v = v + 5; }
```let mut v = vec![1, 2, 3];
let three = v;
v = v + 5;```

## Structs

 IntoIter An iterator that moves out of a vector. Vec A growable list type, written `Vec` but pronounced 'vector.' Drain [Unstable] A draining iterator for `Vec`.