std/vec
Vec<T> is a contiguous, growable array type. It is the standard dynamic array used in Zen-C.
Since v0.1.0
Overview
- Generic: Works with any type
T.
- Dynamic: Automatically resizes as elements are added.
- Safe: Bounds checks on access (panics on failure).
- RAII: Automatically frees memory when it goes out of scope (implements
Drop).
Usage
import "std/vec.zc"
fn main() {
let v = Vec<int>::new();
v.push(10);
v.push(20);
// Iteration
for x in &v {
println "{(*x)}";
}
} // v is freed automatically here
Struct Definition
struct Vec<T> {
data: T*;
len: usize;
cap: usize;
}
Methods
Construction
| Method | Signature | Description |
| new | Vec<T>::new() -> Vec<T> | Creates a new, empty vector. Does not allocate memory until the first push. |
| with_capacity | Vec<T>::with_capacity(cap: usize) -> Vec<T> | Creates a new vector with an initial capacity of cap. Useful for optimization. |
Modification
| Method | Signature | Description |
| push | push(self, item: T) | Appends an element to the back. Panics if allocation fails. |
| pop | pop(self) -> T | Removes the last element and returns it. Panics if empty. |
| pop_opt | pop_opt(self) -> Option<T> | Removes the last element and returns Some(val). Returns None if empty. |
| insert | insert(self, idx: usize, item: T) | Inserts an element at idx. Shifts elements right. Panics if idx > len. |
| remove | remove(self, idx: usize) -> T | Removes and returns the element at idx. Shifts elements left. |
| append | append(self, other: Vec<T>) | Appends the given vec to the back of self, growing capacity as needed. |
| clear | clear(self) | Removes all values. Has no effect on allocated capacity. |
| reverse | reverse(self) | Reverses the order of elements in place. |
Access
| Method | Signature | Description |
| get | get(self, idx: usize) -> T | Returns a copy of the element at idx. Panics if out of bounds. |
| get_ref | get_ref(self, idx: usize) -> T* | Returns a pointer to the element at idx. Useful for avoiding copies. |
| set | set(self, idx: usize, item: T) | Overwrites the element at idx. Panics if out of bounds. |
| first | first(self) -> T | Returns a copy of the first element. Panics if empty. |
| last | last(self) -> T | Returns a copy of the last element. Panics if empty. |
Utility
| Method | Signature | Description |
| length | length(self) -> usize | Returns the number of elements. |
| is_empty | is_empty(self) -> bool | Returns true if the vector contains no elements. |
| contains | contains(self, item: T) -> bool | Returns true if vector contains an element equal to item. |
| clone | clone(self) -> Vec<T> | Returns a new vector with a deep copy of the data. |
| eq | eq(self, other: Vec<T>) -> bool | Returns true if two vectors are equal byte-wise. |
Iteration
| Method | Signature | Description |
| iterator | iterator(self) -> VecIter<T> | Returns an iterator yielding copies. Used by for x in v. |
| iter_ref | iter_ref(self) -> VecIterRef<T> | Returns an iterator yielding pointers. Used by for x in &v. |
Memory Management
| Method | Signature | Description |
| Free | free(self) | Manually frees memory. Safe to call multiple times. |
| Forget | forget(self) | Detaches the memory buffer from the vector. Prevents Drop from freeing memory. |
| Trait | impl Drop for Vec | Automatically calls free() when Vec goes out of scope. |