Zig Academy · Oppitunti

Yleiskäyttöinen pino alusta alkaen

Tyypitetty LIFO-rakenne muistinhallintaohjelman päällä.

Oppitunti 1/413 vaihetta

Yleiskäyttöinen pino alusta alkaen on ilmainen Zig Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Zig Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Mitä pino tekee

Pino on LIFO-kokoelma: viimeisenä pinoon lisätty alkio poistetaan ensimmäisenä. Ajattele tiskille pinottuja lautasia. 🍽️

Tee siitä geneerinen

Jotta voit säilyttää minkä tahansa alkiotyypin, kirjoita funktio, joka ottaa tyypin ja returns-palauttaa rakennetyypin. Jokainen kutsu tuottaa kyseiselle tyypille sovitetun pinon.

fn Stack(comptime T: type) type {
    return struct {};
}

Tallenna alkiot ja allokaattori

Rakenne sisältää kasvavan alkioiden slicen sekä allocator-allokaattorin, jolta se lainaa muistia. Zig ei piilota allokointia.

return struct {
    items: []T,
    len: usize,
    alloc: std.mem.Allocator,
};

Viittaa rakenteeseen @Thisilla

Palautettu rakenne on nimetön, joten metodit nimeävät oman tyyppinsä muodolla @This(). Näin jokainen metodi pysyy täysin geneerisenä.

const Self = @This();

Alusta tyhjä pino

init-funktio ottaa allokaattorin ja palauttaa uuden tyhjän pinon. Mitään ei allokoida ennen kuin pinoon lisätään alkio.

fn init(a: std.mem.Allocator) Self {
    return .{ .items = &.{}, .len = 0, .alloc = a };
}

Push voi epäonnistua

Varatun puskurin kasvattaminen voi vaatia muistia, joten push palauttaa virheyhdistelmän. Kutsujan on käsiteltävä muistin loppumisen tilanne nimenomaisesti.

fn push(self: *Self, value: T) !void {
    // grow then store
}

Kasvata reallocilla

Tilaa saadaksesi pyydä allokaattoria suorittamaan slicelle realloc suurempaan kokoon. Uusi pituus määräytyy kasvatuskäytäntösi mukaan.

self.items = try self.alloc.realloc(self.items, self.len + 1);
self.items[self.len] = value;
self.len += 1;

Poista päällimmäinen arvo

pop palauttaa optionaalisen arvon: päällimmäisen alkion, jos pinossa on sellainen, tai null-arvon pinon ollessa tyhjä. Tyhjä pino ei aiheuta kaatumista.

fn pop(self: *Self) ?T {
    if (self.len == 0) return null;
    self.len -= 1;
    return self.items[self.len];
}

Vapauta allokoimasi muisti

Koska omistat puskurin, sinun on palautettava se. deinit-metodi vapauttaa slicen saman allokaattorin kautta.

fn deinit(self: *Self) void {
    self.alloc.free(self.items);
}

Käytä sitä

Muodosta konkreettinen tyyppi kutsumalla funktiota ja alusta se sitten. Stack(i32) on todellinen, täysin tarkistettu tyyppi, joka on valmis kokonaislukujen lisäämiseen.

var s = Stack(i32).init(allocator);
defer s.deinit();
try s.push(42);

Yksi määritelmä, monta pinoa

Kutsu funktiota eri tyypeillä, jolloin jokainen kutsu tuottaa erillisen, erikoistetun pinon. Stack(u8) ja Stack(f64) eivät vahingossa jaa koodia.

Pikatarkistus

Geneerinen pinosi tarvitsee keosta muistia kasvaakseen. Mistä tämä muisti tulee?

Kertaus

Geneerinen pino on tyyppiin palauttava funktio, joka sisältää alkiot ja allocator-allokaattorin. Push kasvattaa pinoa, pop palauttaa optionaalisen arvon ja deinit vapauttaa muistin. 🎯

Aloita maksutta

Opi Zig tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Yleiskäyttöinen pino alusta alkaen” ilmainen?

Kyllä – oppitunnin ”Yleiskäyttöinen pino alusta alkaen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Zig Academy-kurssin, päivitä CoddyKit PROhon. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yleiskäyttöinen pino alusta alkaen”?

Tyypitetty LIFO-rakenne muistinhallintaohjelman päällä. Harjoittelet Zig Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Zig Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Zig Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Yleiskäyttöinen pino alusta alkaen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Zig Academy-oppitunnilla?

Kyllä. Jokainen Zig Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yleiskäyttöinen pino alusta alkaen
  2. Yksisuuntainen linkitetty lista
  3. HashMapin ja AutoHashMapin käyttö
  4. Profilointi ja turvallisuuden kompromissit
← Takaisin: Zig Academy