[Powered by Google Translate] [Artikulua 6] [More erosoa]
[Rob Bowden] [Harvardeko Unibertsitateko]
[Hau da CS50.] [CS50.TV]
>> Gure galdera atala dugu.
URL espazioa lehenago bidali dut.
Galderen atalean hasieran esaten
itxuraz ez naiz oso-osorik, oso erraza galdera bat unsick-
zer da valgrind?
Zer esan nahi du valgrind egin?
Edonork zer valgrind du esan nahi?
[Student] egiaztatzen memoria filtrazioak.
Bai, valgrind memoria orokor bat checker da.
Azken batean, kontatzen duzu memoria filtrazioen edozein bada,
hau da, batez ere, zer erabiltzen ari gara delako nahi izanez gero
egin eta arazoa multzoa edo nahi baduzu
big-taula lortzeko, memoria filtrazioak ez dute inolako behar duzu,
eta, kasu horretan, memoria leak ezin duzula aurkituko duzu,
ere kontuan mantentzeko bakoitzean fitxategi bat irekitzeko
eta itxi ez baldin baduzu, memoria-leak bat da.
>> Jende asko ari dira nodo batzuk ez askatzeaz bila
denean, benetan, ez dute itxi hiztegiaren lehen urratsa.
Kontatzen du, baita ere, duzu baliogabea edozein bada irakurtzen edo idazten du,
Horrek esan nahi du, saiatu eta balio bat ezarri
zeure, amaieran haratago da, eta ez du seg matxura gertatuko
baina valgrind harrapaketa, behar duzun bezala ez dira hor idazten,
eta, beraz, behin betiko duzu ez duten edo edozein.
Nola valgrind erabili duzu?
>> Galdera orokor bat da
mota exekutatu da eta irteera begiratu.
Irteera asko aldiz erabatekoa da.
Dago fun erroreak non duzu gauza batzuk izugarri oker bada ere
begizta batean gertatzen da, gero, azkenean, izango da esatea, "Way errore gehiegi.
Gaur egun kontatuta gelditu naiz. "
Funtsean da textual irteera duzula analizatu.
Azkenean, esan dizu memoria filtrazioen duzula,
zenbat blokeak, baliagarria izan daiteke, zeren
da bloke unfreed bada, orduan izan ohi da errazago aurkitu
1.000 bloke baino unfreed.
1.000 bloke unfreed ziurrenik ez duzu askatzeaz
Zure lotuta zerrendak egokian edo zerbait.
Hori Valgrind.
>> Orain, gure galdera atala dugu,
ez duzu behar deskargatzeko.
Nire izenaren gainean klik egin dezakezu, eta horiek tira espazioa.
Orain me klik egin.
Berrikusketa, ordua: 1 pila izango da, lehenengo ari gara egiten.
Berrikusketa, ordua: 2 ilara izango da, eta banaka lotuta zerrenda (r) en berrikusketa, ordua: 3 izango da.
Hasierako gure pila.
Dio hemen, pila bat oinarrizko bat da,
oinarrizko datu informatikako egiturak.
Oso adibide da prototypical
jantokia erretiluak pila.
Funtsean duzunean pila bat sartzen ari dira,
norbait, esan du "Oh, erretiluak pila bat bezala."
Erretiluak pilatu duzu.
Ondoren, erretilu bat zabaltzen joan,
pila jarri zen (a) ren erretiluan lehen lortzean bota.
Hemen ere atsegin-pila dio
pila izeneko memoria segmentu dugu.
Eta zergatik pila deitzen da?
>> Pila bat datuak egitura bezala delako,
eta bultzada azalduko pila pila fotogramak,
markoak non pila funtzio bat berariazko dei bat bezalakoak dira.
Eta pila bat bezala, beti izango duzu itzuli
funtzio-dei bat lortzen duzu aurretik pila beheko fotogramen berriro.
Nagusiak dei foo dei bar eta taberna nagusira zuzenean itzuli ezin duzu.
Beti lortu eta bultzaka leihoa zuzena pila jarraitu.
Bi operazio, esan bezala I, push eta pop dira.
Dutenek unibertsala termino dira.
Push eta pop pila ez du axola zer jakin behar duzu.
Ilarak daude, hainbat mota ikusiko dugu.
Ez da benetan termino bat unibertsala, baina push eta pop pila for unibertsala dira.
Push besterik ez da, pila jartzen.
Pop da hartu off pila.
Eta hemen ikusten dugu gure typedef struct pila ditugu,
beraz, char ** kateak behar dugu.
Ez zaitez ** edozein beldur.
Hori amaitzeko kateen array bat izateaz
edo erakusle bat array pertsonaia, non
karaktere erakusleak kateak izan ohi da.
Ez du izan kateak izango, baina hemen, kateak izan ari dira.
>> Kateak array bat daukagu.
Tamaina, eta horrek adierazten du zenbat elementuak dira gaur egun pila bat daukagu,
eta, ondoren, gaitasuna, hau da, zenbat elementu pila izango dugu.
Gaitasuna off hasi behar den zerbait 1 baino handiagoa,
baina tamaina hasiko da 0 gisa.
Orain daude, funtsean, hiru modu desberdinetan pila bat dela pentsa dezakezu.
Beno, ez da ziur aski gehiago, baina nagusiak bi modu daude
inplementa dezakezu array bat erabiliz, edo inplementa dezakezu lotuta zerrenda bat erabiliz.
Loturarik zerrendak dira mota trivial pila egiteko.
Oso erraza da lotutako zerrendak erabiliz pila bat egiteko,
beraz, hemen, array erabiliz pila bat egin behar izan dugu,
eta, ondoren, array erabiliz, ez da ere bi eratara egin dezakezu uste.
Aurretik, esan dut pila gaitasuna dugu,
beraz, elementu bat doi dezakegu pilan.
>> Modu batean gerta zitekeela bezain laster hit 10 elementu gisa, gero Bukatutakoan da.
Ezagutzen ez dela munduko 10 gauza lotuak goiko dezakezu
izango duzula zure pila inoiz 10 baino gehiago izan gauza on
pilaren tamaina on loturik Kasu horietan, goiko bat izan dezakezu.
Edo zure pila unbounded litezke,
baina ari zaren array bat egiten bada, horrek esan nahi du, aldi bakoitzean bakarra 10 elementu hit
ondoren, 20 elementu hazten ari zaren joan, eta 20 elementu hit duzu,
30 elementu edo 40 elementu zure array hazten joan zaren.
Edukiera handitzeko, eta hemen zer egin behar dugu, hau da, behar duzu.
Gehienezko tamaina iritsiko gara gure pila bakoitza denbora,
zerbait on push dugu, edukiera handitzeko behar dugu.
Hemen, push push boolearra (char * str) izendatu dugu.
Char * str kate pila gainean bultzaka ari garela da,
eta boolearra besterik ez dio arrakastarik izan ala ez dugu, edo huts egin du.
>> Nola huts egin ahal izango dugu?
Zer da soilik inguruabar duzula uste
non false itzuli beharko genuke?
Bai.
[Student] bada osoa eta mugatzen ezarpena bat erabiltzen ari gara.
Bai, eta, beraz, nola ez-definitu zuen dugu erantzun
beteta badago eta itxitako ezarpena bat erabiltzen ari gara.
Ondoren, behin betiko faltsua izango dugu itzultzeko.
Bezain laster hit 10 gauzak array, ezin dugu egokitzen 11, faltsua itzuliko gara.
Zer da bada unbounded? Bai.
Ezin baduzu arrazoiren batengatik array zabaltzen.
Bai, eta, beraz, memoria mugatua baliabide bat da,
eta, azkenean, bultzaka mantentzen dugu gauza pila gainean eta gehiagoko berriz,
eta saiatu handiagoa array esleitu egokitzen goaz
edukiera handiagoa, eta erabiltzen ari garen malloc edo dena delakoa faltsua itzuli egingo da.
Beno, malloc null itzuliko da.
>> Gogoratu, bakoitza denbora deitu al duzu inoiz malloc, egiaztapena behar duzu behar bada ikusteko
null itzultzen edo bestela, zuzentasuna kenkaria da.
Pila bat izan unbounded nahi dugu geroztik,
kasu bakarra itzuli faltsua goaz saiatzen gara, nahi izanez gero.
handitzeko eta gaitasuna malloc edo dena delakoa itzultzen faltsua.
Ondoren, pop argumentu bat behar du,
pilaren goialdean eta katea itzultzen du.
Whatever azken pilan bultzatu da zer pop itzuli egin da,
eta kentzen ere pila.
Eta nabarituko null itzultzen dela pila ez bada.
Da beti posible pila hutsik dago.
Java, zauden hori, edo beste hizkuntza erabiltzen bada,
pila huts bat aterako da salbuespen bat edo zerbait eragin dezake.
>> Baina C, null arazo horiek nola kudeatu dugu kasu asko mota da.
Null itzultzea da nola pila hutsik zela adierazten dugu.
Kodea duten zure pila funtzionalitatea probatu egingo dugu,
ezartzea bultza eta pop.
Hau ez da kode asko izan.
I-benetan egiten dugu, hori baino lehen, aholkua, iradokizun-
ikusten ez baduzu, malloc funtzioa ez da bakarrik
zuretzat zeure memoria esleitzen.
Esleipenen funtzio familia daude.
Lehen malloc, zu erabiltzen da.
Ondoren, calloc malloc gauza bera egiten du,
baina dena zero izango da zuretzat.
Duzun inoiz bada nahi dena ezartzeko null zerbait mallocing ondoren
besterik ez duzu erabili behar calloc ordez idazteko lehen lekua
loop memoria-bloke osoa zero.
>> Idazketa malloc bezalakoa da, eta kasu berezi asko ditu,
baina, funtsean, zer idazketa ez da
erakuslea ordurako esleitu hartzen du.
Idazketa arreta jarriz hemen nahi duzun funtzioa da.
Erakuslea ordurako malloc itzuli behar izaten ditu.
Demagun eskatu malloc erakuslea 10 byte.
Ondoren, beranduago, 20 byte nahi duzun konturatzen zara,
beraz, idazketa deitu erakuslea 20 byte horretan,
eta idazketa automatikoki zuretzat guztia gainean kopiatu.
Besterik ez duzu deitzen badu malloc berriro, I 10 byte bloke bat bezala.
Orain 20 byte bloke bat behar dut,
beraz, 20 byte malloc I bada, orduan eskuz kopiatu Lehenik eta behin, 10 byte behar dut
bigarren gauza sartu eta, ondoren, lehenengo gauza.
Idazketa hori kudeatu ahal izango duzu.
>> Oharra sinadura void * izango da,
besterik ez da erakuslea memoria-bloke bat itzuli
ondoren void * ptr.
Void * pentsa dezakezu generic erakuslea gisa.
Oro har, void * inoiz ez aurre egiteko,
baina malloc void * itzuli egin da, eta, ondoren, besterik ez erabili bezalako
char * hau gaur egun izango.
Aurreko void * izan da malloc itzuli
gaur egun idazketa onartuz joan, eta, ondoren, tamaina
byte esleitu nahi duzun kopurua, beraz, zure gaitasuna da.
Emango dizu dut minutu pare eta gure espazioan.
Hasi Revision 1.
Gelditu dut espero ondoren, denbora nahikoa push ezartzeko,
eta, ondoren, break emango dizut beste pop egiteko.
Baina benetan ez hainbeste kodea duten guztiak.
Kodea gehien zabalduz stuff da seguruenik, edukiera zabalduz.
Ados, erabat egin behar, presioa ez
baina betiere, eskuineko bidea zauden bezala sentitzen duzun bezala, hori da ona.
>> Does Edozeinek kodea edozein dio sortu nirekin eroso sentitzen dira?
Bai, egingo dut, baina ez du inor kodea edozein tira dezaket?
Ados, ezin, hasten zara gorde, edozein da?
Urrats hori ahaztu dut beti.
Ados, push begira,
Zure kodea azaldu nahi al duzu?
[Student] Lehenik eta behin, tamaina handitu dut.
Agian izan beharko nuke, hala ere uste dut, tamaina handitu nuen,
da eta gaitasuna baino txikiagoa bada, ikusten dut.
Eta ez bada gaitasuna baino gutxiago, gehitu array dagoeneko dugun dut.
Eta ez bada, ahalmena biderkatu I 2
eta kateak array reallocate dut zerbait edukiera handiagoa.
Eta gero, hori huts egiten badu, erabiltzaileak esaten dut, eta itzultzeko faltsuak,
eta isuna bada, orduan katea jarri dut berria Leku.
>> [Rob B.] Halaber, nabarituko polit bat bitekin operadorea hemen erabiltzen dugun
2 bider.
Gogoratu, ezker shift 2 biderkatu behar da beti joan.
Eskuin shift 2 arabera banatzen da luze gisa gogoratzen duzun esan nahi du.
2 zatitzea 2 arabera banatzen da zenbaki oso bat.
1 hemen edo han moztu egin dezake.
Baina shift 1 utzitako 2 biderkatu behar da beti joan
osokoa mugetatik gainezkatzea zaren, eta, ondoren, ez da izango.
Alboko comment A.
-Do hau ez da inolaz kodeketa inolako aldatzeko gustatzen zait,
baina honen antzeko zerbait egin nahi dut.
Gaur egun jada pixka bat egiteko.
Agian, hau ez da kasu honetan ezin hobea erakutsi,
baina segmentu I-bloke horietan
ados, hau gertatzen bada, gero zerbait egin behar dut joan,
eta, ondoren, funtzioa egiten da.
Ez dut behar korritu ondoren, nire begiak modu guztiak funtzio behera
beste ondoren gertatzen dena ikusteko.
Hori izanez gero gertatzen bada, orduan itzuliko dut.
Horrez gain, hau haratago guztia erantsi nice prestazioa
desplazatzen utzi behin.
Behar ez nuen-bada ridiculously lerro luzeak inoiz Zugandik gertu,
ondoren, 4 byte horiek, lagun dezake, eta, gainera, zerbait gehiago ezker da,
gutxiago overwhelmed sentitzen duzu nahi ados, gogoratu behar dut
Begizta bat beste baten barruan barruan, berriz, loop batean ari naiz.
Anywhere itzulera hau egin ahal izango duzu berehala, I mota bezala.
Guztiz aukerakoa da, eta ez da inolaz ere espero.
>> [Student] behar luke egon tamaina huts egoera?
Huts baldintza hemen huts egin du idazketa dugu, eta, beraz, bai.
Ohartu huts egoera, ustez,
dugu free stuff geroago ezean, beti ari gara huts egin du
ez du axola zenbat aldiz saiatu gara zerbait push.
Mantendu dugu bultzaka bada, incrementing tamaina mantendu dugu,
nahiz eta ez gara ezer pila gainean jarri.
Normalean ez dugu Kontatzailea tamaina arte
dugu bezala ondoren jarri du pilan.
Egin nahi dugu, esan, bai hemen eta hemen.
Eta gero s.size ≤ gaitasuna esaten ordez, edukiera baino txikiagoa da,
besterik ez delako non dena zen mugitu.
>> Eta gogoan, leku bakarra izan gara, seguru asko, itzultzeko faltsuak
Hemen, non da idazketa itzuli null
eta gertatuko errore estandarra gogoratu nahi izanez gero,
agian, kasu honetan kontuan hartu dezakezu, non errore bat estandarra inprimatu nahi duzun,
stderr hain fprintf ordez standard out zuzenean inprimatzeko.
Berriz ere, ez da esperantza bat, baina errore bat ez bada,
idatzi printf, ondoren, nahi out estandarrak ordez akats estandarra inprimatu egin dezakezu.
>> Edonork beste ezer kontuan izan dute? Bai.
[Student] [inaudible] baino gehiago joan ahal duzu?
[Rob B.] Bai, binariness benetako edo zer da?
[Student] Beraz, biderkatu 2?
[Rob B.] Bai, batez ere.
Lur bitarrean, berriz, beti izan dugu gure digituak multzoa.
Ezkerraldean hau aldatzearen 1 funtsean txertatzen hemen eskuinaldean.
Itzuli honetan, binary dena gogoratzeko
2 potentzia bat da, beraz, honetan 2 adierazten du, 0,
1 2, 2, 2.
Eskuinaldean 0 bat sartu, mugitzeko besterik ez dugu dena baino gehiago.
Zer 2 izan 0 1 2 da, 2, 2.
Txertatuko dugun eskuinaldean
da, nahitaez, 0 izango da,
zentzua.
Al duzu inoiz biderkatzen bada zenbaki bat 2, ez da amaitzeko bakoitiak
beraz, leku 0 2 0 izan behar du,
eta, hau da, zer da aurretik erdi mugitzeko duzu gertatuko bada ez dut ohartarazi
bit kopurua zenbaki oso bat haratago,
1 hori amaitzeko off joan.
Hori bakarrik gertatuko kezka gaitasunak benetan handiak aurre bada.
Baina puntu hartan, eta, ondoren, bilioika gauza array batekin ari zara aurre,
memoria sartzen dira, eta agian ez hala ere.
>> Pop, eta are errazagoa da orain lortu ahal izango dugu.
Egin nahi izan duzu gertatuko sorta bat osoa, pop,
eta orain edukiera erdian berriro.
Idazketa duzu memoria zenbatekoa txikitu dezakezu,
baina ez duzu kezkatu horregatik, eta, beraz, idazketa kasu bakarra izango da
memoria gero eta handiagoa, inoiz ez memoria shrinking
den pop super errazteko.
Orain ilarak, pilak era atsegin izango diren,
baina ordena hartzeko gauza izarrekin alderantziz.
Ilara batean adibide prototypical lerro bat da,
balitz English uste dut, esan nahi dut
ilara baten adibide prototypical ilara batean.
Beraz, lerro bat bezala, lehen pertsonan line Oraindik bada,
linearen lehen pertsonak izan espero duzu.
Line pertsona azken Oraindik bada, azken zerbitzua izango duzu.
FIFO eredu hori deitzen diogu, pila, berriz, LIFO eredua izan zen.
Hitz horiek nahiko unibertsalak dira.
>> Pila Like eta array-ak ez bezala, ilarak normalean ez erdiko elementuak sartzeko aukera ematen.
Hona hemen, pila bat, push eta pop ditugu.
Hemen, deitu horietako enqueue eta adierazten gertatuko dugu.
Ere entzun dut shift eta unshift izeneko horiek.
Entzun dut esaten push eta pop ere ilarak aplikatzeko.
Entzun ditut sartu, kendu,
beraz, bultza eta, pop, pilak buruz hitz egiten badugu, eta ari zara bultzaka leihoa.
Ari zaren ilarak buruz hitz egiten bada, erabili nahi dituzun hitz hautatu ahal izango duzu
txertatzeko eta kentzeko, eta zer deitu behar da adostasuna ez da.
Baina, hemen, enqueue eta adierazten dugu.
Orain, egiturari itxura pila struct ia berdina.
Baina pista mantentzeko burua dugu.
Behera hemen dio uste dut, baina zergatik burua behar dugu?
Prototipoak dira funtsean berdinak push eta pop.
Dezakezu uste push eta pop gisa.
Alde bakarra da pop itzuli da-ordez azken, lehenengo da itzuli.
2, 1, 3, 4, edo zerbait.
Eta hemen, hasiera-hasieratik.
Gure ilaran da erabat osoa, beraz, ez da lau elementu.
Gaur egun, gure ilara amaiera 2,
eta, gaur egun, beste zerbait sartu gara.
>> Zerbait bestela, zer egin genuen pila bertsioan txertatu nahi dugu
gure memoria bloke zabaldu dugu.
Zein da arazoa?
[Student] 2 mugitzen zara.
Zer aurretik esan dut ilara amaieran,
horrek ez du zentzurik 1 hasten garela,
ondoren, nahi adierazten du 1 dugu, ondoren adierazten 3, ondoren adierazten 4,
ondoren adierazten 2, ondoren, hau adierazten du.
Ezin dugu erabili idazketa,
edo, gutxienez, idazketa beste modu batean erabiltzeko aukera izango duzu.
Baina beharko duzu ez bakarrik erabili idazketa.
Eskuz kopiatu zure memoria zoaz.
>> Daude memoria kopiatzeko bi funtzioak.
, Memcopy eta memmove.
Man orriak irakurtzen dut zein erabili nahi duzun ikusteko.
Ados, memcopy, diferentzia da
memcopy eta memmove, kasu heldulekuak behar bezala
non eskualdeko gainean gertatzen den eskualde bat kopiatzeko ari zaren
ari zaren kopiatzea.
Memcopy ez kudeatu. Memmove du.
As-arazoa dela pentsa dezakezu
demagun guy hau kopiatu nahi dut,
lasaia honetan, lau horiek.
Azkenean, zer array behar itxura
kopia 2, 1, 2, 1, 3, 4, eta, ondoren, bukaeran stuff batzuk ondoren.
Baina hori menpeko diren ordena kopiatu dugu,
Izan ere, eskualde horretan ari gara kopiatzea ez badugu kontuan hartzen geroztik
gainjartzen ari gara kopiatzea,
gero Irteeran bezala, baliteke dugu hemen, 2 joan nahi dugun leku kopiatu,
ondoren mugitu gure erakusleak aurrera.
>> Orain hemen eta hemen ari dugu, eta gaur egun kopiatu nahi dugu
lasaia honetan, tipo hau eta eraman aurrera gure erakusle.
Zer azkenean eskuratu dugu, 2, 1, 2, 1, 2, 1
egokiak ordez 2, 1, 2, 1, 3, 4 baita
2, 1 overrode jatorrizko 3, 4.
Memmove heldulekuak behar bezala.
Kasu honetan, batez ere, beti erabili memmove
heldulekuak delako zuzena.
Ez du, oro har, ez da egin okerrago.
Ideia horren ordez, hasiera-hasieratik, eta modu honetan hasten kopiatzea da
besterik ez genuen bezala, hemen, amaieran hasten da eta kopia,
eta, kasu horretan, ezin da inoiz duzu arazo bat.
Errendimendua ez da galdu.
Beti erabili memmove. Inoiz ez memcopy kezkatu.
Eta hori da non bereizita memmove ari zaren
zure ilara zati bilduta inguruan.
Kezkak ez bada erabat egin.
Hau da, pila, push, eta pop baino gehiago zaila da.
>> Edonork kodea edozein lan egin izan dugu?
Nahiz eta guztiz osatu gabe baldin bada?
[Student] Bai, erabat osatu gabe, baina.
Guztiz osatu gabe dago, betiere fin-Berrikusketaren gorde?
Bakar denbora bakoitza ahazten dut.
Ongi da, zer ez ikusi egingo zaio, gertatzen da gauzak tamaina aldatu behar dugu.
Erabat ignore resize.
Azaldu kode hau.
Lehen naiz egiaztapena tamaina da lehenengo kopia baino gutxiago bada
eta, ondoren, horren ondoren, sartu nuen burua + tamaina hartzen
eta ziur wraps array edukiera inguruan egiten dut,
eta Kate berria sartu dut posizio berean.
Ondoren, tamaina handitzeko I, eta egia itzultzeko.
>> [Rob B.], hau da, behin betiko kasuetan erabiliz mod nahi ari zaren bat.
Edozein kasu-mota bat, non itzulbiratzeko inguruan duzu, uste duzu inguruan biltzeko,
berehalako pentsamendu mod izan behar du.
Optimizatzea azkar bat bezala / zure kodea lerro bat laburragoa
line berehala honi jarraituz nabarituko duzu
besterik ez tamaina + +, eta, beraz, batu lerro honetan sartzeko, tamaina + +.
Orain behera hemen dugu, kasu
non ez dugu behar adina memoria
beraz, gure ahalmena handitzen ari gara 2.
Arazo bera izan duzu hemen uste dut, baina alde batetara utzi ahal izango dugu orain,
non baduzu, zure edukiera handitzeko huts egin du,
ondoren, zure edukiera txikitzeko 2 berriro nahi duzu.
Ohar labur bat da, besterik ez bezala egin ahal izango duzu + =
ere egin dezakezu << =.
Ia ezer berdinen aurretik joan daiteke, + = | =, & =, << =.
Char * berriak gure memoria bloke berria da.
Oh, hemen baino gehiago.
>> Zer pertsonek gure memoria bloke berria mota buruzko deritzozu?
[Student] char ** izan behar da.
Thinking gure struct hemen,
kateak da zer reallocating ari gara.
Storage dinamiko berri bat osoa egiten ari gara ilaran elementuak.
Zer da zure kateak behar esleitzea goaz oraintxe ari gara mallocing
eta, beraz, berria da, char ** izango da.
Kateak array bat izango da.
Ondoren kasuan pean false itzuli goaz?
[Student] char * egiten dugu?
[Rob B.] Bai, dei ona.
[Student] Zer izan da hori?
[Rob B.] * karakterra tamaina egin nahi ditugu, ez baitago nahi dugu jada-
hau litzateke, benetan oso arazo handi bat izan sizeof (char) 1 izango lukeelako.
Sizeof char * 4 izango da,
ints ari zaren aurre aldiz asko, beraz,
ihes da joera int * int tamaina eta tamaina delako
32-bit sistema bat dira gauza bera izango da.
Baina, hemen, sizeof (char) eta sizeof (char *) ari dira orain, gauza bera izango du.
>> Zer inguruabar non faltsua itzuliko gara?
[Student] New null da.
Bai, berria da null bada, faltsua itzuliko gara,
eta behera bota dut hemen
[Student] [inaudible]
[Rob B.] Bai, hori gauza ederra da.
Bai egin izan duzu 2 aldiz edukiera edo ahalmena shift 1 eta ondoren bakarrik ezarri edo dena delakoa hemen.
Egin dugu izan genuen bezala.
Edukiera >> = 1.
Eta inoiz ez zaren 1 lekua galdu kezkatu
utzi 1 desplazatzen duelako, eta, beraz, leku 1 da, nahitaez, 0,
1 shifting, oraindik ari zaren fina izango da.
[Student] Horretarako itzuli aurretik behar duzu?
[Rob B.] Bai, hau erabat ez du zentzurik.
>> Orain bere gain hartzen amaitzeko Egia amaieran itzuli dugu.
Memmoves horiek egin dugu,
Kontuz ibili behar dugu, nola egiten dugu.
Does Edozeinek edozein iradokizun nola egiten dugu?
Hona hemen gure Irteeran.
Ezinbestean, hasieran berriro hasi nahi dugu
eta bertatik kopia gauzak, 1, 3, 4, 2.
Nola egin hori?
Lehenik eta behin, gizon orria begiratu memmove berriro daukat.
Memmove, argumentuak ordena beti da garrantzitsua.
Gure helmuga nahi dugu, lehenik eta behin, iturri, bigarren, hirugarren tamaina.
Alderantzikatu iturburua eta helburua duten funtzio asko daude.
Helmuga, iturri joera koherentea izan zertxobait.
Mugitu, zer da itzuli?
Erakuslea itzultzen du helmuga, edozein Hori dela-eta nahi duzu baliteke.
Argazki irakurri ahal izango dut, baina gure helmuga batera joan nahi dugu.
>> Zein da gure helmuga behar du?
[Student].
[Rob B.] Bai, eta bertan daude kopiatzea dugu?
Lehenik eta behin, kopiatzea ari gara 1, 3, 4.
Zer esan nahi du-1, 3, 4.
Zer da hau 1 helbidea?
Zer da 1 helbidea?
[Student] [inaudible]
[Rob B.] Head + lehen elementu helbidea.
Nola lehen array elementu hartu behar dugu?
[Student] Ilara.
[Rob B.] Bai, q.strings.
Gogoratu, hemen, gure burua 1.
Darn. Uste dut da magikoki
Hemen, gure burua 1. Nire kolorea aldatu ere noa.
Eta hemen kateak.
Honek, bai ahal izango dugu idazten baino gehiago egin dugu hemen
buruak + q.strings.
Jende asko ere idatzi & q.strings [buru].
Hau ez da benetan edozein gutxiago eraginkorra.
Da pentsatzea ari zaren dereferencing eta ondoren, helbide lortzean,
baina konpilatzailea itzuli zer aurretik izan genuen hala ere, q.strings + burua.
Edo pentsatu nahi duzun modua.
>> Eta zenbat byte kopiatu nahi dugu?
[Student] Edukiera buru.
Edukiera buru.
Eta gero, beti izan duzu idazteko adibide bat
figura hori eskuinera bada.
[Student] It behar 2 Gero, banatzen da.
Bai, eta, beraz, tamaina erabili izan dugula uste dut.
Dugu oraindik tamaina-ari
tamaina erabiliz, tamaina 4 berdinak ditugu.
Gure tamaina 4 da. Gure burua: 1.
3 elementu hauek kopiatu nahi dugu.
Hori da behatu egiaztatu tamaina burua behar bezala 3.
Eta atzera datozen hemen, aurretik esan dugun bezala,
gaitasuna erabiltzen dugu gero, 2 zatitzea genuke
dugu dagoeneko gure ahalmena hazi da, eta, beraz, horren ordez, tamaina erabili dugu.
Kopiak zati hori.
Orain, beste zati bat, zati hori, hasiera-hasieratik utzi kopiatu behar dugu.
>> Hori zer posizioa sartu memmove?
[Student] Plus tamaina - buru.
Bai, eta, beraz, dagoeneko egin dugu tamaina kopiatu - burua bytes
eta, beraz, non gainerako byte kopiatu nahi dugu berria da
eta, ondoren, tamaina minus-ondo, byte kopurua dagoeneko dugu kopiatu sartu
Eta gero, non dira kopiatzeko dugu?
[Student] Q.strings [0].
[Rob B.] Bai, q.strings.
Egin izan dugu, eta bai q.strings [0].
Nabarmen hori baino gutxiago komuna da.
, Besterik ez bada, 0 izango da, eta, ondoren, joera, q.strings ikusiko duzu.
Hori da, non kopiatzea ari gara.
Zenbat byte kopiatu utzi dugu? >> [Student] 10.
Eskuin.
[Student] 5 biderkatu egin dugu - 10 aldiz tamaina byte edo zerbait?
Bai, eta, beraz, hau da, non-zer ari gara kopiatzea?
[Student] [inaudible]
Zer ari gara gauza kopiatzea mota da?
[Student] [inaudible]
Bai, * char duten kopiatzea ari gara, beraz, ez dakigu non horiek datozen.
Beno, non ari diren seinalatuz, kateak bezala, amaituko dugu, ilara gainean bultzaka
edo ilara gainean HILARAN IPINTZEN.
Non horiek datozen, ideia ez dugu.
Besterik ez dugu behar char * s beren segimendua egiteko.
Ez dugu nahi tamaina kopiatu - bytes burua.
- Burua char * s, tamaina kopiatu nahi dugu
beraz, hau biderkatu sizeof (char *) goaz.
Same behera hemen, buru * sizeof (char *).
>> [Student] Zer jakin [inaudible]?
Eskubide hori hemen?
[Student] Ez, hori azpian, tamaina - buru.
[Rob B.] eskubide hori hemen?
Erakuslea aritmetika.
Nola erakuslea aritmetika lanera joan da
automatikoki biderkatzen ari garela mota aurre tamaina.
Just nahi hemen, new + (tamaina - burua)
zehazki & berri - buru] baliokidea
espero dugu behar bezala lan egiten duten bitartean,
geroztik int array aurre ari gara, gero ez dugu indizea int-
edo 5 tamaina eta 4 elementu nahi duzun, orduan indizea dugu
int array [4].
You don't [4] * int tamaina.
Maneiatzen dituen automatikoki, eta kasu honetan
literalki baliokidea da, beraz, parentesia sintaxia
besterik ez da hau bihurtu bezain laster, konpilatu duzun bezala.
Zerbait zaindua izan behar duzu
neurri gehitzen ari zaren buru
ez byte gehitzen ari zaren.
Bat char * gehitzen ari zara, zein byte edo dena delakoa izan daiteke.
>> Beste galdera?
Ados, adierazten da errazagoa izango.
Emango dizut minutu bat ezartzeko.
Oh, eta uste dut, hau da egoera berean non
enqueue kasuan, ari gara, null HILARAN IPINTZEN bada,
agian, hura kudeatzeko nahi dugu, agian ez dugu.
Ez dugu berriro hemen, baina gure pila kasuan bezala.
Enqueue null bada, nahi ezikusi izatea.
Edonork kodea zenbait tira dezaket?
[Student] dut adierazten du.
2 bertsioa, ados.
Azaldu nahi al duzu?
[Student] Lehenik eta behin, ziurtatu ilaran zerbait
eta tamaina jaitsi da 1.
Hori egin behar duzu, eta, ondoren, burua itzuli
eta ondoren, mugitu burua, 1.
Ados, beraz, ez dago bat izkina kasuan, kontuan hartu behar dugu. Bai.
[Student] zure burua azken elementua bada,
gero, nahi ez dituzun burua array kanpo seinalatu.
>> Bai, eta, beraz, ahalik eta azkarren burua gure array amaieran hits,
adierazten dugunean, gure burua an behar berriz 0.
Zoritxarrez, ezin dugu hori urrats bat.
Ziurrenik nuke konpondu da asmatzen dut
hau da, char * izango da, zer itzultzen ari gara,
edozein aldagai izen nahi izan.
Ondoren, gure ahalmena burua mod nahi dugu
eta, ondoren, itzuli RET.
Jende asko hemen egin dute agian
hau-you'll kasuan da jendeak burua bada
edukiera baino handiagoa da, ez buru - edukiera.
Eta hori zer mod da inguruan lan egiten.
Head mod = edukiera askoz ere garbiagoa
edukiera edukiera burua baino buru handiagoa bada baino inguruan egokitzerik
>> Zalantzak dituzu?
Ados, utzi dugu azken gauza da gure lotutako zerrenda da.
Zerrenda lotuta portaera batzuk erabil liteke zenituen
lotutako taulak hash zerrendak, hash taula bat egin bada.
Biziki gomendatzen dut hash taula bat egiten da.
Dituzte dagoeneko dezakezu trie bat egin,
baina saiatzen dira, zailagoa.
Teoria, asymptotically ari dira hobeak.
Baina handi taula begiratu,
eta saiatzen da, ez dute inoiz hobeto, eta memoria gehiago hartzen dute.
Everything about saiatzen eta ondorioz sortu okerrago lan gehiago.
David Malan soluzioa beti da
mezu beti zuen bere trie konponbidea, eta ikus dezagun non dago gaur egun.
Zer zen pean, zuen David J?
# 18 zen, eta hori ez da izugarri txarra, beraz,
eta hori onenetako bat izango saiatzen uste dezakezu
edo onena bat trie baten saiatuko da.
Ere ez da bere jatorrizko irtenbidea?
Trie konponbideak joera gehiago izan RAM erabilera barruti honetan sentitzen dut.
>> Oso top behera joan, eta RAM erabilera digituak bakarra da.
Joan behera beheko aldera, eta, ondoren, saiatuko ikusten hasten zara
non RAM erabilera erabat masiboa lortzen dituzu,
eta saiatzen dira, zailagoa.
Ez dago oso-osorik, baina hezkuntza-esperientzia bat merezi egin baduzu.
Azken gauza gure lotutako zerrenda da,
eta horiek hiru gauza, pilak, ilarak, eta lotutako zerrendak,
informatika al duzu inoiz ez edozein etorkizuneko gauza
ezagutzen duzu gauza horiek bere gain hartuko du.
Guztia oinarrizko dira.
>> Loturarik zerrendak, eta hemen banaka lotutako zerrenda bat dugu gure ezartzea izango da.
Zer esan nahi du banaka lotuta esan nahi bi aldiz lotuta ez bezala? Bai.
[Student] hurrengo erakuslea erakusleak, baino soilik puntu,
ko eta ondoren aurrekoa bezala.
Bai, eta, beraz, irudi formatuan, zer egin dut?
Bi gauza egin behar dut. Argazki eta irudi izan dut.
Argazki formatuan, gure banaka lotuta zerrendak,
ezinbestean, gure zerrenda burua erakuslea mota batzuk ditugu,
eta, ondoren, gure zerrendan barruan, besterik ez dugu erakusleak
eta, agian, puntu hau null.
, Zure lotuta banaka zerrenda bat marrazki tipikoa izango da.
Bi aldiz lotuta zerrenda A, atzeraka joatea dezakezu.
Ematen dut zerrendan edozein nodo baduzu, ondoren, derrigorrez dezakezu lortu
beste nodo zerrendako edozein da bi aldiz lotuta zerrenda bat bada.
Baina badizut zerrendan hirugarren nodo eta banaka lotuta zerrenda bat da,
ez da inoiz zaren lehen eta bigarren nodo.
Eta ez da onurak eta detriments, eta bistako bat
hartu tamaina gehiago nahi, eta non gauza horiek seinalatuz pista mantentzeko duzu.
Baina zaindu bakarrik gara banaka lotuta.
>> A gauza batzuk ezartzea izan dugu.
Zure typedef struct nodo, int i: struct nodo * hurrengo; nodoa.
Typedef That zure adimenak sartu behar da erre.
Quiz 1 nahi behar zerrenda lotuta nodo typedef bat eman,
eta berehala scribble behera egin ahal izango duzu behar duzu
nahiz eta pentsatu gabe.
Pare galdera asmatzen dut, zergatik egiturari hemen behar dugu?
Zergatik ezin nodo * esaten dugu?
[Student] [inaudible]
Bai.
Nodo bat definitzen duen gauza bakarra da gauza bat
typedef bera da.
Baina puntu honetan, analizatzean mota gara hau eta egitura nodo definizio bidez,
ez dugu amaitu gure typedef oraindik, beraz geroztik typedef ez da amaitu,
nodoa ez da existitzen.
Baina struct nodo egiten du, eta nodo honetan hemen,
izan ere eman ahal zaizkie beste ezer.
Deitu behar izan n.
Deitu ahal izango da lotutako zerrenda nodo.
Deitu behar izan ezer.
Baina struct nodoa deitu behar dira eta egitura nodo hau gauza bera.
Zer da hau ere hemen egongo deitzen duzunean,
eta beraz, galderaren bigarren puntua erantzuten
hori dela-eta-a ikusiko duzu structs eta structs-typedefs aldiz asko,
typedef struct non bakarrik ikusiko dituzu anonimoak structs ikusiko duzu,
ezartzeko eta egitura, hiztegi, edo dena delakoa.
>> Zergatik hemen ez nodo esan behar dugu?
Zergatik ezin anonimo eta egitura bat izango da?
Ia gauza bera erantzun.
[Student] da erreferentzia eta egitura barruan behar duzu.
Bai, eta egitura barruan, eta egitura bera aipatzeko behar duzu.
Ez baduzu, izena eman eta egitura bat da, struct anonimo bat izanez gero, ezin da erreferentzia.
Eta azkenik, baina ez behintzat-horiek guztiak izan beharko zertxobait zuzenean,
lagunduko duzu eta konturatu behar dute ari zaren hori izanez gero idatziz
zerbait gaizki egiten ari zaren gauza mota horiek ez badu zentzurik.
Azken baina ez, gutxienez, zergatik ez dute struct nodo *?
Zergatik ezin nodo besterik ez da egiturari dira hurrengo?
[Student] egiturari hurrengo erakuslea.
Hori da, ezinbestean, zer nahi dugun.
Zergatik izan daiteke inoiz ez struct nodo hurrengo?
Zergatik ez struct nodo * hurrengoa izan behar du? Bai.
[Student] infinitua loop bat bezalakoa da.
Bai.
[Student] litzateke bakar batean egon daitezke.
Bai, besterik gabe, nola tamaina edo zerbait egin genuke pentsatzea.
Eta egitura baten tamaina da, funtsean, + edo - eredua batzuk hemen edo han.
Funtsean struct, gauzak tamainen batura izango da.
Eskubide hori hemen, ezer aldatu gabe, tamaina da erraza izango.
Struct nodoaren tamaina da i + hurrengo tamaina tamaina izango du.
I tamaina 4 izango da. Hurrengo tamaina 4 izango da.
Struct nodoaren tamaina 8 izango da.
Ez badugu * sizeof pentsatuz,
gero, sizeof (i) 4 izango da.
Tamaina eta egitura nodo hurrengo i tamaina + struct nodo hurrengo tamaina joan
+ I + struct nodo hurrengo tamaina tamaina.
Nodo errekurtsio infinitua izango litzateke.
Hori dela eta, hau da, gauzak nola izatea.
>> Berriz ere, zalantzarik gabe, buruz ikasi duten,
edo, gutxienez, ulertzen nahikoa gai izan daiteke
arrazoia zer begiratu behar bezala bidez.
Gauzak inplementatzeko nahi dugu.
Luzera bada list-
iruzur eta mantendu
global luzera edo zerbait, baina ez dugu horretarako.
Zerrendaren luzera zenbatzen ari dugu.
Badu dugu, funtsean, bilaketa bat da, beraz,
beraz, zenbaki osoen zerrenda lotuta zenbaki oso lotuta zerrendan bada bat behar dugu.
Itxi zerrendaren hasieran txertatzeko.
Append amaieran txertatzeko da.
Insert_sorted zerrendako posizio ordenatzen txertatzeko.
Insert_sorted mota bere gain hartzen ez erabili modu txarrean itxi edo erantsi.
>> Insert_sorted insert_sorted-ari zaren ezartzeko
demagun gure lotuta zerrenda dugu.
Hau da, gaur egun, hala nola 2, 4, 5 itxura.
3 sartu behar dira, eta, beraz, betiere zerrenda bera, dagoeneko horrela antolatu nahi dut,
erraza da, non 3 pertenece aurkitu.
2 hasiko dut.
Ados, 3 2 baino handiagoa da, beraz, jarraitzea nahi dut.
Oh, 4 handiegia da, beraz, 3 joateko 2 eta 4 arteko ezagutzen dut,
eta erakusleak eta stuff hori guztia konpondu behar dut.
Baina ez dugu ez bada zorrozki erabili insert_sorted
gustatzen dezagun, besterik gabe esan 6 gunearen aurretik I,
gero, nire zerrenda lotutako bihurtu da hau.
Gaur egun, ez du zentzurik, eta, beraz, insert_sorted, besterik ez dezakezu bere gain hartzen
zerrenda hori horrela antolatu, nahiz eta eragiketa existitzen
ez da horrela antolatu eragin dezake, eta hori da.
Aurkitu lagungarria txertatze-beraz, horiek inplementatzeko joan zaren gauzak nagusia.
>> Oraingoz, hartu minutu bat luzera egin behar badu,
eta horiek nahiko azkarra izan behar du.
Itxi Nearing, beraz, edonork ezer luzera edo badu?
Ia berdina izan dute.
[Student] Length.
Ikus dezagun, berrikusi.
Ongi da.
Azaldu nahi al duzu?
[Student] erakuslea nodo bat sortu dut, eta lehenik eta behin, gure aldagai global abiarazi,
eta, ondoren, null bada seg matxura bat lortu Ez dut, beraz, eta 0-ra itzuliko Hori horrela bada, egiaztatu dut.
Bestela, I begizta bidez, pista Conservación guztia barruan
zenbat aldiz sartu ditut zerrendako hurrengo elementua
eta gehikuntza-operazio bera ere sartzeko benetako elementu hori,
eta gero, etengabe I check null bada ikusteko,
eta da null izanez gero, eta gero eta aborts accessed dut elementu kopurua itzultzen du.
>> [Rob B.] Does Edozeinek ezer iruzkinak edozein?
Badirudi WISE fina zuzentasuna.
[Student] ez dut uste nodo == null behar duzu.
Bai, eta, beraz, nodo bada == null bueltan 0.
Baina nodo == null gero, hau-oh, zuzentasuna gai bat da.
Besterik ez i ari zaren itzuli zen, baina ez da esparrua oraintxe.
Besterik ez duzu egin behar int i, beraz, 0 = i.
Baina nodo da null bada eta, ondoren, oraindik ere i 0 izango da,
eta 0-ra itzuliko dugu, eta, beraz, kasu honetan berdin-berdina da, beraz.
Beste gauza bat komuna da adierazpenean mantentzeko
loop for nodo barruan.
Esan-oh izan duzu, ez.
Dezagun mantendu hau.
Baliteke nuke jarri int i = 0 Hemen,
gero nodo * nodo = hemen lehen.
Eta hau da seguruenik, hau kentzeko lortzean gaur egun.
Hau da, ziurrenik, nola idatzi nuke.
Izan duzu atsegin dute hau ere bila.
Loop egitura hemen
ia natural int i = 0 izan behar du
array luzera baino txikiagoa da i + +.
Horrela batetik bestera joateko, array bat baino gehiago badituzu, hau da, nola batetik bestera joateko lotuta zerrenda bat baino gehiago.
>> Uneren batean bigarren izaera izan beharko luke.
Kontuan, hau da, ia gauza bera izango da.
Lotutako zerrenda bat baino gehiago batetik bestera joateko nahi duzu.
Nodo-I ez daki zer balio deritzo.
Nodoa i.
Nodo hartan balioa = Egia bada itzultzeko i, eta hori da.
Oharra itzultzeko modu bakarra dugu inoiz faltsua
loturiko zerrenda osoa zehar batetik bestera joateko bada, eta inoiz ez itzultzeko egia,
beraz, zer honek.
Bigarren mailako note-Ziurrenik ez get edo erantsi gunearen aurretik.
>> Quick azken oharra.
Ikusiko duzu estatiko keyword bada, eta, beraz, demagun static int Aldaketa = 0,
ondoren Aldaketa egiten dugu + +, funtsean dezakezu pentsatu aldagai global gisa,
nahiz eta esan dut hori ez da nola luzera ezartzeko goaz.
Naiz egiten hemen, eta, ondoren, + + zenbatzea.
Inola ere gure zerrendan lotutako gure Aldaketa ari gara incrementing nodo bat sartu ahal izango dugu.
Puntua da zer esan nahi du estatiko keyword.
Besterik ez bada nuen int Aldaketa 0 = erregularra global aldagai zaharra izango litzateke.
Zer static int Aldaketa bitarteko dela, fitxategi hau aldagai global bat da.
Fitxategi batzuk ezinezkoa da,
pset 5 uste duzu hasi baldin badaude.
Estrategia bi daukazu, eta duzu dictionary.c,
eta gauza global bat besterik ez duzu deklaratzen bada, eta gero ezer estrategia
dictionary.c eta alderantziz eskura daiteke.
Global aldagaiak dira edozein. C fitxategia eskuragarri,
baina aldagai estatikoak bakarrik fitxategia barruan eskuragarri daude,
beraz barruan spell checker edo barruan dictionary.c,
hau da nire aldagaia deklaratzeko nuke nire array tamaina mota
edo nire hitzak hiztegian kopurua tamaina.
Edozeinek sartzeko global aldagai bat aldarrikatu nahi ez dut ez denez,
Buruz benetan bakarrik zait nire helburu propioa.
>> Honi buruz gauza ona da, halaber, izen osoa talka stuff.
Beste fitxategi batzuk saiatzen izeneko Aldaketa aldagai global bat erabili nahi izanez gero, gauzak oso oker,
beraz, hau nicely mantentzen gauza segurua, eta bakarrik sartu ahal izango duzu,
eta inork ez bestela, eta beste norbaitek deitzen Aldaketa global aldagai bat adierazten bada,
gero, ez da zure aldagai estatikoak izeneko Aldaketa oztopatzeko.
Hori zer estatikoak da. Fitxategia aldagai global bat da.
>> Ezer galderak?
Multzo guztiak. Bye.
[CS50.TV]