Vec<T> is a contiguous, growable array type. It is the standard dynamic array used in Zen-C.
- 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).
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 Vec<T> {
data: T*;
len: usize;
cap: usize;
}
| 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 if you know the number of elements in advance. |
| 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. Safe usage. |
| 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. Panics if idx >= len. |
| append |
append(self, other: Vec<T>) |
Appends all elements from other to self. Consumes other (move semantics). |
| clear |
clear(self) |
Removes all values. Has no effect on allocated capacity. |
| reverse |
reverse(self) |
Reverses the order of elements in place. |
| 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. Panics if out of bounds. 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. |
| 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 (byte-wise). |
| 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. Takes a pointer to avoid moving other. |
Zen-C supports operator overloading. Vec<T> implements the following:
| Operator |
Method |
Description |
+ |
add |
v1 + &v2. Returns a new vector (concatenation). |
+= |
add_assign |
v1 += &v2. Appends v2 to v1. |
== |
eq |
v1 == &v2. Structural equality check. |
!= |
neq |
v1 != &v2. Structural inequality check. |
<< |
shl |
v << item. Pushes item to the back. |
>> |
shr |
v >> &item. Pops the last element into item. |
* |
mul |
v * n. Returns a new vector with elements repeated n times. |
*= |
mul_assign |
v *= n. Repeats elements in-place n times. |
[] |
get / set |
v[i] and v[i] = x. Standard indexing. |
| 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 (sugar) or for x in v.iter_ref(). Allows in-place mod. |
| Method |
Signature |
Description |
| Free |
free(self) |
Manually frees memory. Safe to call multiple times. |
| Forget |
forget(self) |
Detaches the memory buffer from the vector (sets fields to 0). Prevents Drop from freeing memory. Useful for implementing move semantics or transferring ownership. |
| Trait |
impl Drop for Vec |
Automatically calls free() when Vec goes out of scope. |