Resizing Array - std.ArrayList
Introduction
Zig's standard library provides an ArrayList data structure that can be used to create dynamic arrays.
//
// Use ArrayList to resize array
//
const std = @import("std");
const print = std.debug.print;
const pageAlloc = std.heap.page_allocator;
const arenaAlloc = std.heap.ArenaAllocator;
pub fn main() !void {
var arena = arenaAlloc.init(pageAlloc);
defer arena.deinit();
const allocator = arena.allocator();
var arr_m = std.ArrayList(i32).init(allocator);
defer arr_m.deinit();
for (17..52) |i| {
try arr_m.append(@intCast(i));
}
print("\nUsing ArrayList to resize array: \n", .{});
print("Capacity: {d}\n", .{arr_m.capacity});
print("Last index: {d}\n", .{arr_m.items.len - 1});
print("First element: {d}\n", .{arr_m.items[0]});
print("Last element: {d}\n", .{arr_m.items[arr_m.items.len - 1]});
}
Pros and Cons
- +Easier, much simpler method.
- +Memory is managed automatically.
- -Less efficient for programs heavy on "small but frequent" memory allocations.
If there are thousands or even tens of thousands small memory allocations scattered all over a program, it might be better to use custom function as explained in this article.