typestar

ArrayList en Zig

La lista que crece es unmanaged: cada append entrega el allocator explícitamente.

const std = @import("std");

pub fn main() !void {
    var gpa = std.heap.DebugAllocator(.{}){};
    defer _ = gpa.deinit();
    const alloc = gpa.allocator();

    // ArrayList is unmanaged: every growing call takes the allocator.
    var hauls = std.ArrayList(f32).empty;
    defer hauls.deinit(alloc);

    try hauls.append(alloc, 12.5);
    try hauls.append(alloc, 8.0);
    try hauls.appendSlice(alloc, &.{ 15.25, 6.75 });

    std.debug.print("{d} hauls logged\n", .{hauls.items.len});
    const last = hauls.items[hauls.items.len - 1];
    std.debug.print("first {d:.2}, last {d:.2}\n", .{ hauls.items[0], last });
}

Cómo funciona

  1. std.ArrayList(f32).empty arranca sin almacenamiento alguno.
  2. append y appendSlice toman alloc porque crecer puede reservar memoria.
  3. .items es el slice vivo: se indexa, se mide, se lee de vuelta.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
575
Tokens
171
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 158 segundos.

Escribe este fragmento

Paso 2 de 3 en Memoria; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →