Une pile générique créée de zéro
Une pile LIFO paramétrée par type sur un allocateur.
Une pile générique créée de zéro est une leçon Zig Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Zig Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Zig Academy comprend 4 leçons au total.
Rôle d’une pile
Une pile est une collection LIFO : le dernier élément que vous empilez est le premier que vous dépilez. Imaginez des assiettes empilées sur un comptoir. 🍽️
La rendre générique
Pour contenir des éléments de n’importe quel type, écrivez une fonction qui reçoit un type et renvoie un type de structure. Chaque appel fournit une pile adaptée à ce type.
fn Stack(comptime T: type) type {
return struct {};
}Stocker les éléments et un allocateur
À l’intérieur, la structure conserve une tranche extensible d’éléments ainsi que l’allocateur auquel elle emprunte de la mémoire. Zig ne masque jamais les allocations.
return struct {
items: []T,
len: usize,
alloc: std.mem.Allocator,
};Référencer la structure avec @This
La structure renvoyée est anonyme ; les méthodes nomment donc leur propre type avec @This(). Ainsi, chaque méthode reste entièrement générique.
const Self = @This();Initialiser une pile vide
Une fonction init reçoit l’allocateur et renvoie une pile vide fraîchement créée. Rien n’est alloué tant que vous n’empilez pas d’élément.
fn init(a: std.mem.Allocator) Self {
return .{ .items = &.{}, .len = 0, .alloc = a };
}L’opération push peut échouer
Agrandir le tampon peut nécessiter de la mémoire ; push renvoie donc une union d’erreur. Les appelants traitent explicitement le cas de mémoire insuffisante.
fn push(self: *Self, value: T) !void {
// grow then store
}Réutiliser realloc pour agrandir
Pour faire de la place, demandez à l’allocateur de realloc la tranche avec une taille supérieure. La nouvelle longueur dépend de votre stratégie d’agrandissement.
self.items = try self.alloc.realloc(self.items, self.len + 1);
self.items[self.len] = value;
self.len += 1;Dépiler la valeur supérieure
pop renvoie une valeur optionnelle : l’élément supérieur si la pile en contient un, ou null si elle est vide. Une pile vide ne provoque aucun plantage.
fn pop(self: *Self) ?T {
if (self.len == 0) return null;
self.len -= 1;
return self.items[self.len];
}Libérer ce que vous avez alloué
Puisque vous possédez le tampon, vous devez le restituer. Une méthode deinit libère la tranche avec le même allocateur.
fn deinit(self: *Self) void {
self.alloc.free(self.items);
}L’utiliser
Créez un type concret en appelant la fonction, puis initialisez-le. Stack(i32) est un type réel et entièrement vérifié, prêt à empiler des entiers.
var s = Stack(i32).init(allocator);
defer s.deinit();
try s.push(42);Une définition, de nombreuses piles
Appelez la fonction avec différents types : chacun produit une pile distincte et spécialisée. Stack(u8) et Stack(f64) ne partagent pas accidentellement leur code.
Vérification rapide
Votre pile générique a besoin de mémoire du tas pour grandir. D’où provient cette mémoire ?
Récapitulatif
Une pile générique est une fonction qui renvoie un type contenant des éléments et un allocateur. push agrandit la pile, pop renvoie une valeur optionnelle et deinit libère la mémoire. 🎯
Apprends Zig avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Une pile générique créée de zéro » est-elle gratuite ?
Oui — le texte complet de « Une pile générique créée de zéro » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Zig Academy, passe à CoddyKit PRO. Le cours Zig Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Une pile générique créée de zéro » ?
Une pile LIFO paramétrée par type sur un allocateur. Tu pratiques Zig Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Zig Academy ?
Aucune expérience préalable n'est requise. Zig Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Une pile générique créée de zéro » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Zig Academy ?
Oui. Chaque leçon Zig Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Une pile générique créée de zéro
- Une liste chaînée simple
- Utiliser HashMap et AutoHashMap
- Profilage et compromis de sécurité