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

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

MethodSignatureDescription
newVec<T>::new() -> Vec<T>Creates a new, empty vector. Does not allocate memory until the first push.
with_capacityVec<T>::with_capacity(cap: usize) -> Vec<T>Creates a new vector with an initial capacity of cap. Useful for optimization.

Modification

MethodSignatureDescription
pushpush(self, item: T)Appends an element to the back. Panics if allocation fails.
poppop(self) -> TRemoves the last element and returns it. Panics if empty.
pop_optpop_opt(self) -> Option<T>Removes the last element and returns Some(val). Returns None if empty.
insertinsert(self, idx: usize, item: T)Inserts an element at idx. Shifts elements right. Panics if idx > len.
removeremove(self, idx: usize) -> TRemoves and returns the element at idx. Shifts elements left.
appendappend(self, other: Vec<T>)Appends the given vec to the back of self, growing capacity as needed.
clearclear(self)Removes all values. Has no effect on allocated capacity.
reversereverse(self)Reverses the order of elements in place.

Access

MethodSignatureDescription
getget(self, idx: usize) -> TReturns a copy of the element at idx. Panics if out of bounds.
get_refget_ref(self, idx: usize) -> T*Returns a pointer to the element at idx. Useful for avoiding copies.
setset(self, idx: usize, item: T)Overwrites the element at idx. Panics if out of bounds.
firstfirst(self) -> TReturns a copy of the first element. Panics if empty.
lastlast(self) -> TReturns a copy of the last element. Panics if empty.

Utility

MethodSignatureDescription
lengthlength(self) -> usizeReturns the number of elements.
is_emptyis_empty(self) -> boolReturns true if the vector contains no elements.
containscontains(self, item: T) -> boolReturns true if vector contains an element equal to item.
cloneclone(self) -> Vec<T>Returns a new vector with a deep copy of the data.
eqeq(self, other: Vec<T>) -> boolReturns true if two vectors are equal byte-wise.

Iteration

MethodSignatureDescription
iteratoriterator(self) -> VecIter<T>Returns an iterator yielding copies. Used by for x in v.
iter_refiter_ref(self) -> VecIterRef<T>Returns an iterator yielding pointers. Used by for x in &v.

Memory Management

MethodSignatureDescription
Freefree(self)Manually frees memory. Safe to call multiple times.
Forgetforget(self)Detaches the memory buffer from the vector. Prevents Drop from freeing memory.
Traitimpl Drop for VecAutomatically calls free() when Vec goes out of scope.