Yleiskäyttöinen pino alusta alkaen
Tyypitetty LIFO-rakenne muistinhallintaohjelman päällä.
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. 🎯
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
- Yleiskäyttöinen pino alusta alkaen
- Yksisuuntainen linkitetty lista
- HashMapin ja AutoHashMapin käyttö
- Profilointi ja turvallisuuden kompromissit