>> [Mūzikas atskaņošanai]
>> [Video atskaņošana]
>> -Viņš Guļ.
>> -Par ko?
>> -Es Nezinu.
>> -Tātad Ko mēs zinām?
>> -That At 9:15, Ray Santoya bija pie ATM.
-Yeah.
Tātad jautājums ir, ko viņš dara at 9:16?
>> -Shooting Par 9 milimetru kaut ko.
Varbūt viņš redzēja snaiperis.
>> -OR Strādāja kopā ar viņu.
>> -Wait.
Iet atpakaļ viens.
>> -Ko tu redzi?
>> -Bring Viņa seju uz augšu visu ekrānu.
>> -His Brilles.
>> -Ir Ir atspulgs.
>> -Tas Ir Nuevitas beisbola komanda.
Tas ir viņu logo.
>> -Un Viņš runā ar kurš ir valkājot, ka jaka.
>> [Beigtu atskaņošanu]
>> DAVID Malan: Labi.
Tas ir CS50, un tas ir nedaudz vairāk no [dzirdams], ar kuru jūs esat
dabbling ar problēmu noteikti četri.
Šodien mēs sākam izskatīties mazliet vairāk dziļi pie šīm lietām, ko sauc norādes,
kas, lai gan tas ir diezgan arcane tēmu,
izrādās, ka tas notiek būt līdzeklis, ar kuru mēs
var sākt veidot un montāža daudz sarežģītākus programmas.
Bet mēs to izdarījām pagājušajā trešdienā veicot kādu Claymation pirmās.
Tātad tas, atsaukšana, ir Mīkstās un mēs izmantojām viņu
lai apskatīt programmu, kas nav īsti darīt kaut ko interesantu,
bet tas bija atklāt dažas problēmas.
Tātad, lai sāktu šodien, kāpēc nav mēs staigāt ātri cauri daži no šiem pasākumiem,
mēģināt destilēt uz cilvēka izteiksmē tieši to, kas notiek šeit
un kāpēc tas ir slikti, un tad pāriet uz un faktiski sākt veidot kaut ko
ar šo metodi?
Tātad tie bija pirmie divas līnijas šajā programmā
un lajs izteiksmē, ko Vai šīs divas līnijas dara?
Kāds, kurš ir pietiekami ērts ar to, kas norādīts uz ekrāna?
Kādas ir šīs divas līnijas dara?
Tas vēl nav viss, kas atšķiras no nedēļas viena,
bet ir dažas jaunas īpašs simbols.
Yeah?
Atpakaļ tur.
>> Mērķauditorija: deklarēšana norādes?
DAVID Malan: Say atkal?
Mērķauditorija: deklarēšana norādes?
DAVID Malan: deklarēšana norādes un pieņemsim noslīpēt mazliet vairāk.
Mērķauditorija: [dzirdams] adrese x un pēc tam y.
DAVID Malan: Un tad risināt.
Tātad, tieši to, ko mēs darām ir mēs deklarēt divus mainīgos.
Šie mainīgie, lai gan, gatavojas būt int tipa zvaigzne, kas
konkrētāk nozīmē viņi gatavojas glabāt
adresi int, attiecīgi, x un y.
Tagad ir vēl kādas vērtības?
Vai ir kādas faktiskās adreses šajās divi mainīgie šajā brīdī?
Nē.
Tas ir tikai tā sauktais atkritumu vērtības.
Ja jums nav faktiski piešķirt mainīgs, kāds bija RAM
iepriekš gatavojas aizpildīt ar nullēm un tie abi no šiem mainīgajiem.
Bet mēs vēl nezinām kādi tie ir, un tas ir
būs galvenais, kāpēc mīkstās zaudējis galvu pagājušajā nedēļā.
>> Tātad tas bija claymation iemiesojums šis
saskaņā ar kuru jums ir tikai divas mainīgie, maz apļveida gabali māla,
ka var saglabāt mainīgos, bet kā tad apkopoja bultas liecina,
viņi nav faktiski norādot jebkur zināms per se.
Tātad mums bija šo līniju, un tas bija jauns pagājušajā nedēļā, malloc atmiņu
piešķiršana, kas ir tikai iedomātā veids stāsta operētājsistēmu, Linux
vai Mac OS vai Windows, hey, dod man kādu atmiņu,
un viss, kas jums ir, lai pastāstītu operētājsistēma
ir tas, kas, kad jautā to atmiņu.
Tas nav gatavojas aprūpi, ko jūs gatavojas darīt ar to,
bet jums ir nepieciešams, lai pastāstītu par apkalpojošā Sistēma, ko veidā malloc.
Yeah?
>> Mērķauditorija: Cik daudz?
DAVID Malan: Cik daudz?
Cik daudz baitos, un tāpēc, tas, atkal, izdomāts piemērs, ir tikai saku,
iedodiet man lielumu int.
Tagad, izmērs int ir četri baiti vai 32 biti.
Tātad tas ir tikai veids, kā sakot, hey, operētājsistēmas,
iedodiet man četri baiti atmiņas ka es varu izmantot manā rīcībā,
un konkrēti, ko dara malloc atgriešanās attiecībā
šai rieciens četru baitu?
Mērķauditorija: Adrese?
DAVID Malan: norādīto adresi.
Šīs rieciens četru baitu adrese.
Tieši tā.
Un tā tas ir to, kas glabājas galu galā X un tas ir iemesls, kāpēc mums nav īsti
vienalga kāds skaits, kas adrese ir, vai tas ir OX1 vai ox2
vai kāds mistisks heksadecimālo adrese.
Mēs vienkārši rūp gleznieciski ka mainīgais x ir tagad
norādot uz šo rieciens atmiņas.
Tātad bulta apzīmē rādītāju, vai konkrētāk, atmiņas adrese.
Bet atkal, mums nav parasti aprūpi kādi ir šie faktiskie adreses.
Tagad šī līnija saka ko lajs izteiksmē?
Star x saņem 42 semikolu.
Ko tas nozīmē?
Jūs vēlaties doties?
Vai nav ieskrāpēt savu kaklu.
>> Mērķauditorija: No x adrese ir pie 42.
>> DAVID Malan: No x adrese ir 42.
Ne gluži.
Tik tuvu, bet ne gluži, jo tur ir zvaigzne, kas ir prefixing šo x.
Tāpēc mums ir nepieciešams, lai kniebiens mazliet.
Yeah?
>> Mērķauditorija: Vērtība, ka rādītājs x ir vērsta uz ir 42.
DAVID Malan: OK.
Vērtība, ka rādītājs ir x norādot uz, teiksim, ir 42,
vai citiem vārdiem sakot, zvaigzne x saka, dodieties uz jebkādu adresi
ir X, vai tas ir 1 Oxford Street vai 33 Oxford Street
vai OX1 vai ox33, kāds ka ciparu adrese ir,
zvaigžņu x ir dereferencing x.
Tā iet uz šo adresi un tad ielieciet numuru 42 tur.
Tā, ka būtu ekvivalents veids, kā pateikt, ka.
Tā ka viss ir labi, un pēc tam mēs pārstāvam attēlu
šādi kur mēs esam pievienojuši 42 uz šo rieciens četriem
baiti uz labajā pusē, bet Šī līnija bija, kad viss gāja greizi
un mīkstās galva popped off šajā brīdī,
jo sliktas lietas notiek, kad Jūs dereference atkritumu vērtībām
vai jūs dereference nederīgs norādes, un es saku nederīgs
jo šajā brīdī Stāsts, kas ir iekšā y?
Kas ir y vērtība balstās par pēdējo pāris soļus?
Yeah?
Kas tas ir?
>> Mērķauditorija: adrese.
DAVID Malan: An adrese.
Būtu jābūt adrese bet es inicializēts to?
Tāpēc man vēl nav.
Tātad, kas ir zināms, ka tur?
Tas ir tikai daži atkritumu vērtība.
Tas varētu būt arī jebkura cita adrese, no nulles līdz 2 miljardi, ja jums ir divi gigs RAM,
vai nulles līdz 4 miljardiem, ja esat ieguva četras gigabaiti RAM.
Tas ir daži atkritumu vērtība, bet problēma ir
ka operētājsistēmas, ja tas nav devis jums
ka rieciens atmiņas, kas īpaši ka jūs mēģināt doties uz,
tas parasti notiek, lai radītu ko mēs esam redzējuši, kā segmentācijas vaina.
Tātad faktiski, kāds no jums, kuri ir cīnījās par problēmām darba laika
vai problēmas, kas ir vairāk parasti ar mēģina izdomāt
segmentācija vaina, tas parasti nozīmē,
jūs pieskaroties segmentu atmiņu, kas jums nevajadzētu būt.
Jūs esat pieskaroties atmiņa, kas operētājsistēma ir ne
ļāva jums pieskarties, vai tas ir dodoties pārāk tālu savā masīvs
vai jau šodien, vai tas ir tāpēc, ka jūs esat pieskaroties
atmiņa, kas vienkārši ir daži atkritumu vērtība.
>> To darot zvaigzne x šeit veida nenoteiktu uzvedību.
Jums nekad nevajadzētu darīt, jo izredzes ir, programma ir tikai gatavojas crash,
jo tu saki, dodieties uz šo adresi
un jums nav ne jausmas, kur šī adrese faktiski ir.
Tātad operētājsistēma ir iespējams gatavojas crash savu programmu
kā rezultātā un, protams, tas ir kas noticis tur mīkstās.
Tātad galu galā, mīkstās fiksēts šī problēma ar šo.
Tātad šajā programmā pati bija kļūdains.
Bet, ja jūs veida veidot uz priekšu un izpildīt šo līniju vietā,
y vienāds x tikai nozīmē, neatkarīgi adrese ir x, arī nodot to y.
>> Un tā gleznieciski, mēs esam pārstāvēta ar divām bultām
no x un y no norādot tajā pašā vietā.
Tātad semantiski, x ir vienāds uz y jo gan no tiem
Uzglabājam pats adrese, ergo norādot 42,
un tagad, kad jūs sakāt zvaigzne y, dodieties uz adresi y,
Tas ir interesants blakus efekts.
Tā adrese y ir pats kā adresi x.
Tātad, ja jūs sakāt doties uz adresi Y un mainīt vērtību līdz 13,
kurš gan cits ietekmē?
X ir, D punktu, tā sakot, būtu jāietekmē arī.
>> Un tiešām, kā Nick vērsa šo attēlu in Claymation bija tieši tā.
Pat ja mēs sekojam rādītāju y, mēs beidzās vienā un tajā pašā vietā,
un tāpēc, ja mēs drukāt out X vai Y ir pointee,
tad mēs varētu redzēt vērtību 13.
Tagad, es saku pointee būt saskan ar video.
Programmētāji, lai mana zināšanas, nekad faktiski
teikt vārdu pointee, to, kas ir norādīts
at, bet konsekvences ar video, saprotam
tas ir viss, kas bija nozīmēja šajā situācijā.
Tātad kādi jautājumi par Claymation vai norādes vai malloc tikai vēl?
Nē?
Viss kārtībā.
>> Tātad bez turpmāka ADO, pieņemsim to apskatīt
at ja tas ir reāli ticis izmantots kādu laiku.
Tāpēc mēs esam bija šo CS50 bibliotēku kas ir ieguvuši visas šīs funkcijas.
Mēs esam izmantojuši GetInt daudz, GetString, Iespējams GetLongLong agrāk
manā PSET vienu vai tā, bet Kas patiesībā ir notiek?
Nu, pieņemsim ātri apskatīt zem motora pārsega pie programmas, kas
iedvesmo kāpēc mēs jums CS50 bibliotēka, un pat kā pagājušajā nedēļā,
mēs sākām veikt tiem mācību riteņi off.
Tātad tas ir tagad sakārtots no sekciju, ko
turpinās jau iekšpusē CS50 bibliotēkā,
pat ja mēs tagad sāksim pārvietojas prom no tā, lai lielākā daļa programmu.
>> Tātad šī ir programma, ko sauc scanf 0.
Tas ir super īss.
Tas vienkārši ir šīs rindas, bet tas ievieš funkciju sauc scanf
ka mēs patiešām gatavojas redzēt brīdis iekšpusē CS50 bibliotēkā,
kaut arī nedaudz citā formā.
Tātad šī programma par 16 līniju tiek atzīta par mainīgo x.
Tātad man četri baiti uz int.
Tas ir bijis stāsta lietotājs, numuru, lūdzu, un pēc tam
Tas ir interesants līnija, kas faktiski saites kopā pagājušajā nedēļā
un šis.
Scanf, un tad pamanāt, ka tas aizņem formāta virkne, tāpat kā printf,
% i ir int, un tad tas aizņem Otrs arguments, kas izskatās mazliet
bailīgs.
Tas ir Ampersand x, un atgādināt, mēs redzējām tikai šo vienu reizi pagājušajā nedēļā.
Kāda Ampersand x pārstāv?
Kāda Ampersand darīt C?
Yeah?
>> Mērķauditorija: Par adrese.
DAVID Malan: Par adrese.
Tātad, tas ir pretējs no zvaigzne operatora,
tā kā zvaigzne operators saka, dodieties uz šī adrese, tad Ampersand operators
saka, izrēķināt adrese šo mainīgo,
un tāpēc tas ir galvenais, jo scanf nolūks dzīvē
ir, lai skenētu lietotāja ieeja no klaviatūras,
atkarībā no tā, kāds viņš vai viņa veidiem, un pēc tam izlasīju, ka lietotāja ievadi
uz mainīgo, taču mēs redzēja pēdējo divu nedēļu laikā
ka mijmaiņas funkcija, kas mums mēģināja pūlēm īstenot
bija tikai sadalīti.
Atgādināt, ka ar mijmaiņas funkciju, ja mēs tikko paziņoja, A un B, kā ints,
mums nebija veiksmīgi mijmaiņas divi mainīgie iekšpusē mijmaiņas
tāpat kā ar pienu un OV, bet tiklīdz swap atgriezās,
kāds bija rezultāts attiecībā uz x un y, sākotnējās vērtības?
Nekas.
Jā.
Nekas nav noticis, ka laiks, jo mijmaiņas mainīt tikai savus vietējos kopijas,
kas ir, visi šoreiz, kad mēs esam
ir iet uz argumentiem uz funkcijām, mēs esam
tikai iet kopijas šiem argumentiem.
Jūs varat darīt ar to neatkarīgi vēlaties ar viņiem,
bet viņi nāksies nē Ietekme uz sākotnējās vērtības.
Tātad tas ir problemātiski, ja jums vēlas, lai ir funkcija, piemēram scanf
dzīvē, kuras mērķis ir, lai skenētu lietotāja ievadi no klaviatūras
un tad aizpildiet sagataves, tāpēc, lai runā, tas ir, dot mainīgo līdzīgi X
vērtība, jo, ja es būtu lai tikai iet X scanf,
ja jūs uzskatāt loģiku pēdējais nedēļa, scanf var darīt, ko vien tā vēlas
kopiju, X, bet tas nevarēja pastāvīgi mainās x, ja mēs dodam
scanf dārgumu karti, tā sakot, kur x iezīmē vietas, kur
mēs caurlaide adresi x tā, ka scanf var iet tur un faktiski maiņa
vērtība x.
Un tā patiešām, visi ka šī programma nav
ja es drīkstu scanf 0, manā avotā 5m katalogs, veikt scanf 0,
dot slash scanf, skaits lūdzu 50, paldies par 50.
>> Tātad, tas nav viss, kas interesanti, Bet kas ir patiešām notiek
ir tā, ka, tiklīdz es aicinu scanf šeit, vērtību x
tiek neatgriezeniski mainījusies.
Tagad tas šķiet jauki un labs, un patiesībā, tas
Šķiet, tāpat kā mums nav tiešām ir nepieciešams CS50 bibliotēka vispār vairs.
Piemēram, pieņemsim palaist Tas vēlreiz šeit.
Ļaujiet man atvērt to uz otru.
Pamēģināsim numuru, lūdzu, un tā vietā, lai sakot, 50 kā agrāk,
pieņemsim tikai teikt nē.
Labi, ka ir mazliet dīvaini.
LABI.
Un tikai daži muļķības šeit.
Tātad tas, šķiet, nav rīkoties kļūdainus situācijās.
Tāpēc mums ir nepieciešams, lai minimāli sākumu pievienojot dažas kļūdām pārbaudi
lai pārliecinātos, ka lietotājs ir drukāti faktisko skaitu, piemēram, 50,
jo acīmredzot rakstīt vārdu netiek atpazīta kā problemātiska,
bet tas, iespējams, vajadzētu būt.
>> Apskatīsim šo versiju, tagad tas ir mans mēģinājums reimplement GetString.
Ja scanf ir tas viss funkcionalitāte celta,
kāpēc mēs tika dabbling ar šiem mācību riteņi piemēram GetString?
Nu, šeit ir iespējams mana vienkāršs versija GetString
saskaņā ar kuru pirms nedēļas, es varētu teikt, man stīgu un sauc to bufera.
Šodien, es esmu gatavojas sākt tikai sakot char zvaigzne, kas, atsaukšanu,
tas ir tikai sinonīms.
Tas izskatās scarier bet tas ir tieši tas pats.
Tātad man mainīgo sauc buferis kas notiek, lai saglabātu virkni,
pateikt lietotāja virkni lūdzu, un tad, tāpat kā līdz šim,
pamēģināsim aizņemties šo nodarbību scanf % s šoreiz un tad iet buferī.
Tagad, ātri veselība pārbaudītu.
Kādēļ es nesaku Ampersand bufera šoreiz?
Secināt no iepriekšējā piemērā.
Mērķauditorija: Char zvaigzne ir rādītājs.
DAVID Malan: Tieši tā, jo šoreiz, palijas
zvaigzne jau ir rādītājs, adrese, pēc definīcijas minētā zvaigzne ir tur.
Un, ja scanf sagaida adresi, pietiek tikai nodot buferī.
Man nevajag teikt aizvieto & zīmes buferi.
Par ziņkārīgs, jūs varētu darīt kaut kas līdzīgs šim.
Tas ir cita nozīme.
Tas dotu jums rādītāju uz rādītāju, kas ir faktiski
derīga lieta C, bet Tagad, pieņemsim glabā to vienkārši
un uzturēt stāstu konsekventa.
Es esmu tikai gatavojas pāriet bufera un tas ir pareizi.
Problēma gan ir šis.
Ļaujiet man iet uz priekšu un palaist šo Programma pēc apkopojot to.
Padarīt scanf 1.
Damn tas, mana kompilators s noķert manu kļūdu.
Dodiet man vienu sekundi.
Šķindēt.
Teiksim scanf-1.c.
LABI.
Tur mēs ejam.
Man to vajag.
CS50 ID ir dažādi konfigurācijas uzstādījumi
kas aizsargā jūs pret sevi.
Man vajadzēja atslēgt tiem, ko darbojas šķindēt manuāli šoreiz.
Tātad stīgu lūdzu.
Es iešu uz priekšu un tips mana mīļākā Hello World.
OK, null.
Tas nav tas, ko es drukāti.
Tātad, tas ir orientējošs kaut kas ir nepareizi.
Ļaujiet man iet uz priekšu un tips kas patiešām ilgu virkni.
Paldies par spēkā es nezinu ja es esmu gatavojas, lai varētu crash to.
Pamēģināsim nedaudz kopiju pastas un redzēt, ja tas palīdz.
Vienkārši ielīmējiet daudz šo.
Tas noteikti ir lielāks stīgu nekā parasti.
Pieņemsim tikai tiešām rakstīt to.
Nē.
Sasodīts.
Komanda nav atrasts.
Tātad tas ir nesaistīti.
Tas ir tāpēc, ka es ielīmēts daži slikti rakstzīmes,
bet tas izrādās nav dodas uz darbu.
>> Mēģināsim to vēl vienu reizi, jo tas ir vairāk jautri, ja mēs faktiski crash to.
Pieņemsim rakstīt šo un tagad, es esmu gatavojas kopēt patiešām ilgi virkni
un tagad pieņemsim redzēt, ja mēs var crash šī lieta.
Paziņojums Es izlaist telpas un Jaunās līnijas un semikoliem
un visas funky rakstzīmes.
Enter.
Un tagad tīkls ir vienkārši ir lēns.
Es tur nospiestu Ctrl-V ir pārāk garš, skaidri.
Sasodīts!
Komanda nav atrasts.
>> LABI.
Nu, jautājums ir tomēr šādi.
Tātad, kas patiesībā notiek ar šo deklarāciju
no char zvaigžņu bufera uz 16 līnijas?
Tātad, ko es saņemu kad es apliecinu rādītāju?
Viss, ko es saņemu ir četru baitu vērtība sauc buferis, bet to, kas ir iekšpusē no tā
pašlaik?
Tas ir tikai daži atkritumu vērtība.
Tāpēc, ka jebkurā laikā jūs deklarēt mainīgo C, tas ir tikai daži atkritumu vērtība,
un mēs sākam paklupt šo realitāti.
Tagad, kad es saku scanf, dodieties uz šo adresi
un nodot neatkarīgi lietotājs veidiem.
Ja lietotājs veidiem sveiki pasaule, labi, kur es varu likt to?
Buffer ir atkritumu vērtība.
>> Tātad tas ir veids kā bulta kas ir norādot, kurš zina, kur.
Varbūt tas ir norādot tepat manā atmiņā.
Un tad, kad lietotājs veidi Hello pasaulē,
Programma mēģina ielieciet stīgu hello world slīpsvītra 0
šajā rieciens atmiņas.
Bet ar lielu varbūtību, bet protams, nav 100% varbūtība,
dators gatavojas tad crash programma jo tas nav
atmiņas man būtu atļauts pieskarties.
Tātad īsumā, šī programma ir kļūdains un tieši šī iemesla dēļ.
Es esmu pilnīgi nedara to, ko?
Kādi pasākumi ir man izlaist, tāpat kā mēs izlaist ar mīkstās pirmo piemēru?
Yeah?
>> Mērķauditorija: Memory sadalījums?
>> DAVID Malan: Atmiņas piešķiršana.
Es neesmu faktiski piešķirti jebkurš atmiņas par šo virkni.
Tātad, mēs varam noteikt šo pāris veidos.
Viens, mēs varam saglabāt to vienkārši un patiesībā, tagad jūs esat
gatavojas sākt, lai redzētu neskaidrākas no līnijas starp to, ko
masīvs ir, ko virkne ir, ko char zvaigzne ir, ko masīvs chars
ir.
Lūk Otrs piemērs iesaistot stīgām un paziņojumu
viss, ko es esmu darījusi tiešsaistē 16 ir, nevis sakot
ka buferis būs char zvaigzne, rādītājs uz rieciens atmiņas,
Es esmu gatavojas ļoti aktīvi dot pats buferis 16 rakstzīmes,
un patiesībā, ja jūs esat iepazinušies ar terminu buferizācijas,
droši vien no pasaules video, ja video ir buferizācijas, buferizācijas,
buferizācijas.
Nu, kāda ir saistība šeit?
Nu, iekšpuse YouTube un iekšpusē video atskaņotāji
parasti ir masīvs kas ir lielāks par 16.
Tas varētu būt masīvs izmēra vienas megabaitu, varbūt 10 megabaiti,
un uz šī masīvā dara savu pārlūkprogrammu lejupielādēt visu ķekars baitu,
visu ķekars megabaitu video, un video atskaņotājs,
YouTube ir vai kurš ir, sākas izlasot baiti no šī masīva,
un jebkurā laikā jūs redzat Vārds buferizācijas, buferizācijas,
tas nozīmē, ka spēlētājs ir gotten līdz gada beigām šī masīva.
Tīkls ir tik lēni, ka tas ir ne uzpildīt masīvs ar vairāk baitu
un tā jūs no bitiem lai parādītu lietotājam.
>> Tātad buferis ir piemērots termins, šeit, ka tas ir tikai masīvs, rieciens atmiņas.
Un tas būs salabot jo izrādās
ka jūs varat ārstēt bloki, it kā tie ir adreses, lai gan buferis
ir tikai simbols, tas ir rakstzīmju sekvence, buferis,
tas ir noderīgs man, programmētājs, Jūs varat iet savu nosaukumu apkārt
it kā tas būtu rādītājs, it kā tā
bija adrese rieciens atmiņas par 16 chars.
Tātad tas ir teikt, es varu iet scanf tieši šis vārds
un tāpēc tagad, ja es drīkstu šo programmu, padarīt scanf 2, dot slīpsvītra scanf 2,
un ierakstiet hello world, Ievadiet, ka LAIKU_
>> Hmm, kas notika?
String lūdzu.
Ko es daru nepareizi?
Hello pasaulē, buferis.
Sveika pasaule.
Ah, es zinu, ko tas dara.
LABI.
Tātad, tas ir lasījums up līdz pirmajā telpā.
Tātad pieņemsim apkrāptu tikai brīdi un teikt, es tikai gribēju kaut ko rakstīt
tiešām ilgi, piemēram, tas ir garš teikums tas ir viens, divi, trīs, četri, pieci,
seši, septiņi, astoņi, deviņi, 10, 11, 12, 13, 14, 15, 16.
LABI.
Tas ir patiešām garš teikums.
Tātad šis teikums ir ilgāk nekā 16 rakstzīmes
un tad, kad es hit Enter, kas notiek varētu notikt?
Nu, šajā gadījumā stāsts, man bija deklarēta buferis
faktiski ir masīvs ar 16 chars gatavi iet.
Tātad, viens, divi, trīs, četri, pieciem, sešiem, septiņi, astoņi, deviņi, 10, 11, 12, 13, 14,
15, 16.
Tātad 16 rakstzīmes, un tagad, kad es lasīt kaut kā šis ir garš
teikums, kas notiek varētu notikt, ir ka es esmu gatavojas jālasa tas ir garš
S-E-N-T-E-N-C-E, teikums.
>> Tātad šis ir apzināti slikta lieta, ka es
glabāt rakstveidā aiz robežas mana masīvs,
ārpus robežām manu buferi.
Es varētu saņemt laimīgs un programma turpināsim darbojas un ir vienalga,
bet vispārīgi runājot, šis patiešām crash savu programmu,
un tā ir kļūda manā kodēt mirkli es solis
aiz robežām Minētās masīvs, jo I
nezinu, vai tas ir vienmēr gatavojas crash
vai ja es esmu tikai gatavojas saņemt laimīgs.
Tātad tas ir problemātiski, jo šajā gadījumā, tas, šķiet, strādāt
un pieņemsim kārdināt liktenis šeit, lai gan IDE, šķiet paciest diezgan daudz
of--
>> Tur mēs ejam.
Beidzot.
Tāpēc es esmu vienīgais, kas var redzēt.
Tāpēc es tikko bija daudz jautrības rakstīt out patiešām ilgu faktisko frāzi
ka tas noteikti pārsniedza 16 baiti, jo I
drukāti šajā trakajā ilgi multi-line frāze, un tad pamanīt to, kas noticis.
Programma izmēģināju drukāšana un tad saņēmu segmentāciju vaina
un segmentācijas kļūdas ir tad, kad kaut kā tas notiek
un operētājsistēma saka nē, nevar pieskarties šo atmiņu.
Mēs ejam, lai nogalinātu Programma kopumā.
>> Tātad tas šķiet problemātiska.
Es esmu uzlabojis programmā, kurā vismaz ir dažas atmiņas,
bet tas, šķiet, vienīgi funkcija GetString, lai iegūtu
virknes kādu ierobežotu garumu 16.
Tātad, ja jūs vēlaties, lai atbalstītu ilgāk teikumi nekā 16 rakstzīmes,
ko tu dari?
Nu, jūs varat palielināt izmērs šo buferi līdz 32.
vai kas šķiet veida īss.
Kāpēc ne mēs tikai veikt tas 1000, bet virzīt atpakaļ.
Kāda ir atbilde intuitīvi par tikko izvairoties no šo problēmu, padarot
mans buferis lielāks, piemēram, 1000 chars?
Īstenojot GetString šādā veidā.
Kas ir labi vai slikti šeit?
Yeah?
Mērķauditorija: Ja jūs saistīt pat daudz vietas un jums nav to izmantot,
tad jūs nevarat pārdalīt šo vietu.
DAVID Malan: Protams.
Tas ir izšķērdīgs, ciktāl, ja jums nav tiešām ir nepieciešams 900 no šiem baitu
un tomēr jūs lūdzot 1000 kopā anyway,
jūs vienkārši patērē vairāk atmiņas par lietotāja datorā, nekā jums nepieciešams,
un galu galā, daži jūs jau esat saskārušās
dzīvē, ka tad, kad jūs esat darbojas daudz programmas
un viņi ēd up daudz atmiņu, Tas faktiski var ietekmēt veiktspēju
un lietotāja pieredze uz datora.
Tātad tas ir sava veida slinks risinājums, lai pārliecinātos, un otrādi,
tas nav tikai izšķērdīgs, kāda problēma joprojām, pat ja es darīt manu buferi
1000?
Yeah?
>> Mērķauditorija: virkne ir garums 1001.
DAVID Malan: Tieši tā.
Ja jūsu virkne ir garums 1001, Jums ir tieši tāda pati problēma,
un mans arguments, es tikai tad dara to 2000,
bet jūs nezināt, kas pārietu cik liels tas būtu,
un vēl, man ir apkopot savu programmu pirms izīrēšanas cilvēki izmanto un lejuplādēt
tā.
Tātad tas ir tieši tāda veida sīkumi, ka CS50 bibliotēku mēģina
lai palīdzētu mums ar, un mēs tikai skatiens dažas no pamatā esošā īstenošanu
šeit, bet tas ir CS50 dot C. Tas ir fails, kas ir bijis par CS50 IDE
Visas šīs nedēļas, kas jūs esat, izmantojot.
Tas ir iepriekš apkopoti un jūs esat bijis, izmantojot to automātiski
pēc būtības kam ir domuzīme L CS50 karogu ar šķindēt,
bet, ja es ritiniet uz leju cauri visiem šīs funkcijas, šeit ir GetString,
un tikai, lai dotu jums garša Kas notiek,
pieņemsim ātri apskatīt relatīvā sarežģītība.
Tas nav super garš funkcija, bet mēs neesam
ir jādomā visu grūti par kā iet par iegūt stīgas.
>> Tātad, šeit ir mana buferis un es acīmredzot inicializēt to null.
Tas, protams, ir pats kā char zvaigzne,
bet es nolēma Īstenojot CS50 bibliotēku
ka, ja mēs ejam būt pilnīgi dinamiska,
Es nezinu, iepriekš cik liels ir stīgu lietotājiem gatavojas vēlaties saņemt.
Tāpēc es esmu gatavojas sākt tikai ar tukšu virkni
un es esmu gatavojas izveidot tik daudz atmiņa kā man ir nepieciešams, lai ietilptu lietotāja string
un ja man nav pietiekami, es esmu gatavojas lūgt
operētājsistēma vairāk atmiņas.
Es esmu gatavojas pārvietot savu string uz lielāku rieciens atmiņas
un es esmu gatavojas atbrīvot vai atbrīvotu nepietiekami liels rieciens atmiņas
un mēs esam tikai gatavojas lai to paveiktu iteratīvi.
>> Tik ātrs skatiens, šeit ir tikai mainīga
ar kuru es esmu gatavojas, lai sekotu kapacitātes mana bufera.
Cik baiti var fit?
Lūk mainīgs n ar kas es esmu gatavojas glabāt
līdzi, cik baiti ir faktiski bufera vai ka lietotājs ir ievadījis.
Ja jūs esat nav redzējis šo pirms, jums var norādīt, ka mainīgais, piemēram, int
ir neparakstīts, kas, kā norāda nosaukums, nozīmē, ka tas ir ne-negatīvs, un kāpēc būtu
Es kādreiz vēlaties apgrūtināt precizējot ka int ir ne tikai int,
bet tas ir neparakstīts int?
Tas ir ne-negatīvs int.
Ko [dzirdams] nozīmē?
>> Mērķauditorija: Tas apraksta summu atmiņas, kas var būt [nedzirdama].
>> DAVID Malan: Jā.
Tātad, ja es saku neparakstīts, tas ir faktiski sniedzot jums vienu mazliet papildus atmiņas
un šķiet, ka sava veida dumjš, bet, ja jums ir viena mazliet papildu atmiņas, ka
nozīmē, ka jums ir divreiz vairāk vērtības var pārstāvēt,
jo tas var būt 0 vai 1.
Tātad pēc noklusējuma, int var būt aptuveni negatīvs 2 miljardi visu ceļu
līdz pozitīvu 2 miljardiem.
Tie ir lieli diapazoni, bet tas joprojām ir sava veida izšķērdīgs
ja jūs tikai rūp izmēri, kas vienkārši intuitīvi
vajadzētu būt ne-negatīvs vai pozitīvs vai 0, arī tad,
kāpēc jūs izšķērdēt 2 miljardus iespējamās vērtības negatīviem skaitļiem
ja jūs nekad gatavojas tās lietot?
Tātad, sakot neparakstītu, tagad mans int var jābūt starp 0 un aptuveni 4 miljardus.
>> Tātad, šeit ir tikai int C dēļ mums nebūs iekļuvuši tikai tagad, jo
kāpēc tas ir int vietā no char, bet šeit ir
kopsavilkums par to, kas notiek gada, un daži no jums
varētu būt, izmantojot, piemēram, fgetc funkcija pat PSET četrās
vai pēc tam, mēs redzēsim to atkal problēma noteikti pieci,
fgetc ir jauki, jo kā nosaukums veida, veida arcanely liecina,
tas ir funkcija, kas izpaužas raksturs un tā,
kas ir būtiski atšķiras par to, ko mēs darām ar GetString
ir, mēs nelietojat scanf tādā pašā veidā.
Mēs esam tikai Ložņu gar soli pa solim vairāk nekā kāds lietotājs ir drukāti,
jo mēs vienmēr varam piešķirt vienu char, un tāpēc mēs vienmēr varat droši
apskatīt vienu char laikā, un burvju sāk notikt šeit.
Es esmu gatavojas, lai ritinātu uz leju, lai vidū šīs funkcijas
tikai īsumā iepazīstināt šo funkciju.
Daudz, piemēram, tur ir malloc funkcija, tur ir
realloc funkcija kur realloc ļauj jums pārdalīt rieciens atmiņas
un dara to lielāks vai mazāks.
Tik garš stāsts īss, un ar vilnis manu roku uz šodienu,
zinu, ka tas, ko GetString dara tas ir sava veida
no maģiski aug vai sarūk bufera kā lietotājs
veidi viņa virkni.
>> Tātad, ja lietotājs ievada Īsumā string, šis kods
tikai piešķir pietiekami atmiņa, lai ietilptu virkni.
Ja lietotājs tur rakstīt kā es to darīja atkal un atkal
un atkal, labi, ja buferis ir sākotnēji šī lielā
un programma saprot, lai pagaidiet minūti, es esmu no vietas,
tas notiek dubultot lielums bufera
un pēc tam divtik bufera un kods, kas dara divkāršošanu,
ja mēs skatāmies uz to šeit, tas ir tikai šo gudrs viena līnijpārvadātāju.
Jūs, iespējams, ir redzējuši šo sintaksi agrāk, bet, ja jūs sakāt zvaigzne ir vienāds,
tas ir tas pats, kas sakot jaudas reizes 2.
Tātad tas tikai tur divkāršojies ietilpība bufera
un pēc tam stāsta realloc dot Pati, ka daudz vairāk atmiņas.
>> Tagad, kā malā, tur ir citas funkcijas šeit
ka mēs neizskatās jebkurā detalizēti izņemot rādīt GetInt,
mēs izmantojam GetString in GetInt.
Mēs pārbaudām, ka tas nav null, kas, atgādināt,
ir īpaša vērtība, kas ir kaut kas nogāja greizi.
Mēs esam no atmiņas.
Labāk pārbaudīt, ka.
Un mēs atgrieztu Sentinel vērtību.
Bet es ņemšu atlikt uz komentāriem par to, kāpēc tad mēs izmantojam šo brālēns scanf
sauc sscanf un izrādās ka sscanf, vai string scanf,
ļauj jums apskatīt līnijas, kas lietotājs ir drukāti, un ļaut jums
analizēt to būtībā un to, ko es esmu darot šeit es esmu stāsta sscanf,
analizēt kāds lietotājs ir drukāti un pārliecinieties% i,
ir vesels skaitlis, kas tajā, un mēs ne nokļūt šodien tieši tāpēc tur ir arī
A% c šeit, bet īsumā pieļauj mums atklāt, ja lietotājs ir ievadījis
kaut fiktīvu pēc skaita.
Tātad iemesls tam, ka GetInt un GetString pateiks, lai mēģinātu vēlreiz, retry, retry
ir tāpēc, ka visi ka kods mēs esam rakstīts,
Tas ir sava veida apskatot lietotāja ievadi in pārliecinoties, ka tas ir pilnīgi ciparu
vai tā ir faktiskā peldošā punkts vērtība vai tamlīdzīgi,
Atkarībā no vērtības funkcionēt jūs izmantojat.
>> Whew.
LABI.
Tas bija kumoss bet jautājums šeit ir
ka iemesls mums bija šie apmācību riteņus
ir tāpēc pēc iespējas zemākā līmenī, tur ir tikai tik daudz lietas, kas
var noiet greizi, ka mēs vēlējāmies uz preemptively rīkoties
šīs lietas noteikti ir Agrākais nedēļas šķiras,
bet tagad ar PSET četriem un pieciem PSET un tālāk jūs redzēsiet, ka tas ir vairāk pie
Jūs taču arī jūs esat vairāk spējīgs risināšanas šos veida problēmas
yourself.
Visus jautājumus par GetString vai GetInt?
Yeah?
>> Mērķauditorija: Kāpēc jūs dubultā ietilpība bufera
nevis tikai palielinot tas ar precīzu summu?
>> DAVID Malan: Labs jautājums.
Kāpēc mēs dubultot jaudas no bufera pretstatā
vienkārši palielinot to ar kādu konstantu vērtību?
Tas bija dizaina lēmums.
Mēs tikko nolēma, ka tāpēc, ka tai ir tendence būt nedaudz dārgāka laika gudrs jautāt
operētājsistēma atmiņu, mēs neesam
vēlaties, lai galu galā nokļūst situācija lieliem stīgām
ka mēs jautāji OS atkal un atkal
un atkal un atkal straujā atmiņu.
Tāpēc mēs tikko nolēma, nedaudz patvaļīgi, bet mēs ceram, ka pamatoti,
ka jūs zināt, ko, pieņemsim mēģināt iegūt priekšā sevi
un tikai glabāt dubultojot tā, ka mēs samazinātu summu reizes
mums ir, lai izsauktu malloc vai realloc, bet kopējais spriedums
piezvanīt, ja nav zinot ko lietotāji varētu vēlēties rakstīt.
Abi veidi varētu būt apstrīdams.
Varbūt labi.
>> Tātad, pieņemsim to apskatīt pāris Citu blakusparādības atmiņu,
lietas, kas var noiet greizi un rīki, ko varat
izmantot noķert šos kļūdām veidus.
Izrādās, jums visiem, lai gan check50 nav teicis jums tik daudz,
ir rakstot bagijs kods kopš nedēļas vienā,
pat ja visi check50 testi pagājis, un pat tad, ja jūs un jūsu TF
Ir super pārliecināti, ka Jūsu kods darbojas kā paredzēts.
Jūsu kods ir buggy vai kļūdains, ka jums visiem,
izmantošanā CS50 bibliotēku, Ir noplūde atmiņu.
Jūs esat lūdzot operētājsistēmas atmiņu vairumā programmu
jūs esat uzrakstījis, bet jūs esat nekad faktiski, ņemot vērā to atpakaļ.
Jūs esat sauc GetString un GetInt un GetFloat,
bet ar GetString, jūs esat nekad sauc unGetString vai dot
String Atpakaļ vai tamlīdzīgi, bet mēs esam redzējuši ka GetString dara piešķirt atmiņu
veidā malloc vai šī funkcija realloc, kas ir tikai
ļoti līdzīgs garā, un vēl, mēs esam bijuši
lūdzot operētājsistēmu atmiņa un atmiņas atkal un atkal
bet nekad dod to atpakaļ.
>> Tagad, kā malā, izrādās, ka kad programma tiek aizvērta, visi no atmiņas
tiek automātiski atbrīvots.
Tātad tas nav bijis milzīgs galā.
Tas nav gatavojas, lai izjauktu IDE vai lēni lietas leju,
Bet, kad programmas darīt parasti noplūde atmiņu
un viņi darbojas uz ilgu laiku.
Ja esat kādreiz redzējuši stulba Little pludmales bumba Mac OS vai smilšu pulksteņa
Windows kur tas ir sava veida palēninot vai domāšana vai domāšana
vai tikai tiešām sāk lēni uz rāpošana,
tas ļoti iespējams, varētu būt rezultāts atmiņas noplūde.
Programmētāji, kas rakstīja programmatūra jūs izmantojat
lūgt operētājsistēma atmiņu ik pēc dažām minūtēm, katru stundu.
Bet, ja jūs darbojas programmatūru, pat tad, ja tas ir
minimāla savā datorā uz stundu vai dienu ilgi,
Jums varētu būt jautā vairāk un vairāk atmiņu un nekad faktiski izmanto
un tāpēc jūsu kods varētu būt, vai programmas var būt noplūde atmiņu,
un, ja jūs sākat noplūdes atmiņu, tur ir mazāk atmiņas par citām programmām,
un efekts ir lēni viss uz leju.
>> Tagad, tas ir līdz šim viens no visnežēlīgākajiem programmas
Jums būs iespējas palaist CS50 tiktāl
kā tās produkcija ir pat vairāk nekā nesaprotams šķindēt s vai veikt vai jebkuras komandu
line programmas mēs esam palaist agrāk, bet par laimi, iestrādāti tās produkciju
ir daži super noderīgi padomi, kas būs noderīga nu PSET četru
vai noteikti PSET pieci.
Tātad Valgrind ir instruments kas var tikt izmantoti, lai meklētu
atmiņas noplūdes jūsu programmā.
Tas ir samērā vienkāršs, lai palaistu.
Palaižot Valgrind un tad, pat lai gan tas ir nedaudz runīgs,
domuzīme domuzīme noplūdes pārbaude vienāds pilna, un pēc tam dot
slīpsvītra un nosaukumu jūsu programmā.
Tātad Valgrind tad palaist savu programmu un pašās beigās savu programmu
darbojas, pirms tas aizveras, un dod jums citu ātru,
tas notiek, lai analizētu savu programma, bet tas ir bijis darbojas
un pateikt jums jūs noplūde jebkurš atmiņa un vēl labāk,
jūs pieskarties atmiņa, kas nepiederēja jums?
To nevar panākt visu, bet tas ir diezgan labi iepatikusies visvairāk lietām.
>> Tātad, šeit ir piemērs no manas nebūdami Šī programma, nebūdami Valgrind,
par programmu, ko sauc atmiņa, un es esmu gatavojas
izcelt līnijas, kas ir galu galā, kas interesē mūs.
Tātad tur ir vēl vairāk traucējošos ka es esmu svītrots no slaida.
Bet pieņemsim tikai redzēt, ko tas programma spēj stāsta mums.
Tas spēj stāsta mums lietas tāpat nederīgu rakstīt izmēru 4.
Citiem vārdiem sakot, ja jūs pieskarties atmiņu, konkrētāk 4 baiti atmiņas
ka jums nevajadzētu būt, Valgrind var pateikt, ka.
Nederīga rakstīt lieluma 4.
Jūs pieskārās četri baiti ka jums nevajadzētu būt.
Kur jūs to darīt?
Tas ir skaistums.
Atmiņas dot c līnija 21 ir vieta, kur jūs ieskrūvē up un tas ir iemesls, kāpēc tas ir noderīgi.
Daudz, piemēram GDB, tas var palīdzēt norādīt jums faktisko kļūdu.
>> Tagad, šis viens ir nedaudz vairāk runīgs, ja ne mulsinoši.
40 baiti 1 blokiem ir noteikti zaudēts zaudējumu ierakstā 1 no 1.
Ko tas nozīmē?
Nu, tas tikai nozīmē, ka jūs lūdza 40 baiti, un jūs nekad deva to atpakaļ.
Tu sauc malloc vai jūs sauc GetString un operētājsistēmas
deva jums 40 baiti, bet jūs nekad atbrīvots vai atbrīvo šo atmiņu,
un lai būtu godīgi, mēs nekad parādīt jums, kā atdot atmiņu.
Izrādās tur ir super vienkārša funkcija sauc bezmaksas.
Stājas Viens arguments, lieta Jūs vēlaties, lai atbrīvotu vai atdot,
bet 40 baiti, acīmredzot, šajā programmas
ir pazuduši rindā 20 no atmiņas dot c.
>> Tātad, pieņemsim redzēt šo programmu.
Tas ir super bezjēdzīgi.
Tas tikai pierāda, Tas īpaši kļūda.
Tātad, pieņemsim to apskatīt.
Šeit ir galvenās un galvenie, uzraksta, zvani funkcija sauc F un tad atgriežas.
Tātad nav tik interesanti.
Kāda f darīt?
Ievērojiet, man nav apnikt ar prototipu.
Es gribēju, lai saglabātu kodu pēc iespējas minimālas.
Tāpēc man f iepriekš galvenais un tas ir jauki, protams,
īsiem programmām, piemēram, šis.
Tātad f neatgriežas neko, un tas neņem neko, bet tas to izdarītu.
Tas apliecina, līdzīgi ar mīkstās piemēram,
rādītājs sauc x, kas notiek uzglabāt adresi int.
Tā ka ir kreisā puse.
Angļu valodā, kas ir labajā pusē dara?
Kāds?
Kas ir tas dara mums?
Yeah?
>> Mērķauditorija: [dzirdams] reizes lielāka par int
kas ir 10 reizes [nedzirdama]
DAVID Malan: Labi un ļaujiet man apkopot.
Tātad piešķirt pietiekami daudz vietas, 10 veseliem skaitļiem vai 10, kas ir lielums int,
tas ir četri baiti, arī tā 10 reizes 4 ir 40, tā ka labajā pusē, kas es esmu
iezīmēto ir dot man 40 baiti un uzglabātu adresi, kura pirmā baits
uz x.
Un tagad visbeidzot, un šeit ir, ja Šī programma ir buggy, kas ir
nepareizi ar līniju 21 balstoties uz šo loģiku?
Kas ir nepareizi ar līniju 21?
Yeah?
Mērķauditorija: Jūs nevarat indekss par x [nedzirdama].
DAVID Malan: Jā.
Man nevajadzētu indekss par x, piemēram, ka.
Tātad sintaktiski, tas ir OK.
Kas ir jauki, ir, daudz, piemēram, jūs var ārstēt nosaukumu masīva
it kā tas ir rādītājs, līdzīgi Jūs varat ārstēt rādītāju, it kā tas ir
masīvs, un tāpēc es varu sintaktiski teikt x bracket kaut ko, x kronšteins i,
bet 10 ir problemātiska.
Kāpēc?
>> Mērķauditorija: Tā tas nav iekšā.
>> DAVID Malan: Tas nav iekšā, ka rieciens atmiņas.
Kas ir lielākā vērtība man vajadzētu liekot tajās kvadrātiekavās?
9, no 0 līdz 9.
Sakarā ar nulles indeksācija.
Tātad 0 līdz 9 būtu labi.
Bracket 10 nav laba un bet, atceros gan, katru reizi
Man šķiet, lai mēģinātu padarīt CS50 IDE crash ierakstot viltus vērtībām,
tas ne vienmēr sadarbojas, un, protams, jūs bieži
saņemt laimīgs tikai tāpēc, ka operētājsistēma nav
paziņojums, ka jūs kādreiz tik nedaudz iet kādu gabalu no atmiņas,
jo jums palika laikā tehniski Jūsu segments, bet vairāk par to
kādā operētājsistēmu klasē, un tā kaut kas līdzīgs šim
varētu ļoti viegli iet neatklāti.
Jūsu programmas nekad gatavojas crash konsekventi bet varbūt reizi awhile.
>> Un tāpēc pamēģināsim Valgrind par to, un šeit ir
kur mēs nokļūt overwhelmed ar izejas momentāni.
Tātad, lai atmiņas Valgrind noplūdes pārbaudi vienāds pilnu dot slash atmiņu.
Un šeit ir iemesls, kāpēc es apsolu tas varētu pārņemt.
Lūk, ko Valgrind, lūk, ko programmētājs, dažus gadus ago-
nolēma, ka būtu laba ideja par izejas izskatās.
Tātad pieņemsim jēgas par to.
Tātad visu ceļu no kreisās puses sānu nesaprotamu iemeslu dēļ
ir process ID programmas mēs vienkārši palaist, unikālo identifikatoru
programmai mēs vienkārši skrēja.
Mēs svītrots, ka no slide, bet tur
ir daži noderīgu informāciju šeit.
>> Pieņemsim ritiniet līdz ļoti top.
Lūk, kur mēs sākām.
Tātad, tas nav viss, kas daudz produkciju.
Lūk, kas nederīgs rakstīt 4 izmērā uz līnijas 21.
Nu, kas bija līnija 21?
Line 21 bija tieši šis un tas ir jēga
ka es esmu likumīgi rakstiski 4 baiti, jo es esmu
cenšas nodot šo skaitli, kas varētu būt kaut kas,
tas vienkārši notiek, ir nulle, bet es cenšos
likt to vietā kas nepieder man.
Turklāt šeit lejā, 40 baiti vienā bloki ir noteikti zaudēti ierakstā 1.
Tas ir tāpēc, ka tad, kad es aicinu malloc šeit, es nekad patiesībā atbrīvotu atmiņu.
>> Tātad, kā mēs varam noteikt šo?
Ļaujiet man iet uz priekšu un būt mazliet drošāk un darīt 9 tur un ļaujiet man šeit bezmaksas X.
Tas ir jauns funkcija šodien.
Ja es tagad atkārto darīt atmiņa dot slīpsvītra, pieņemsim palaist Valgrind uz to vēlreiz,
maksimizētu savu logu un hit Enter.
Tagad, tas ir labi.
Viņi apglabāt labas ziņas visās šo produkciju.
Visi kaudze bloki bija brīvas.
Mēs būsim atpakaļ uz to, ko kaudze ir, bet nav noplūdes ir iespējamas.
Tātad tas ir tikai vēl viens līdzeklis, lai jūsu rīku komplektu
ar kuru jūs varat sākt atrast tagad kļūdas, piemēram, ka.
>> Bet pieņemsim redzēt, kas vairāk var noiet greizi šeit.
Pieņemsim pāreju tagad faktiski atrisinot problēmu.
Kā malā, ja tas būs atbrīvot Mazliet apjukums vai spriedzes,
tas tagad ir smieklīgi.
Jā.
Tas ir diezgan labs.
Tā kā norādes ir adreses un adreses
parasti pēc vienošanās rakstīts ar heksadecimālo.
Ha, ha, tas ir smieklīgi tagad.
Jebkurā gadījumā, tāpēc pieņemsim tagad faktiski atrisinātu problēmu.
Tas ir super, super zema līmeņa līdz šim,
un mēs faktiski var darīt noderīgs lietas ar šīm zema līmeņa informāciju.
>> Tātad mēs ieviesa dažas nedēļas Pirms jēdziens masīva.
Masīvs bija jauki, jo tas ir grūti, lai attīrītu mūsu kodu
jo, ja mēs vēlējāmies rakstīt programma ar vairākiem studentiem
vai vairāki nosaukumi un māju un dorms un koledžas un visu, kas,
mēs varētu uzglabāt viss vairāk tīri iekšpusē masīva.
Bet ierosināt vienu negatīvie no masīva līdz šim.
Pat ja jūs esat nav cietis pats programmā, vienkārši instinktīvi,
kas ir slikta lieta par masīvu, varbūt?
Es dzirdu dažus murmina.
Mērķauditorija: Tas ir grūti lai mainītu izmēru.
DAVID Malan: Tas ir grūti lai mainītu izmēru.
Jūs nevarat mainīt izmēru no masīva, patiesībā, per se
C. Jūs varat piešķirt vēl vienu masīvu, pārvietot visu no vecā
jaunajā, un tagad ir dažas papildu telpas,
bet tas nav, piemēram, valoda, piemēram, Java vai Python
vai kādu citu skaits valodas ar kuru daži no jums
varētu būt pazīstami, kur jūs var tikai glabāt pievienojot lietas
ad nauseam līdz beigām masīva.
Ja jums ir masīvs izmērs 6, kas ir tās izmērs,
un tik daudz, piemēram, ideja agrāk kam buferi noteiktu lielumu,
Jums ir uzminēt no vārtiem kāda izmēra jūs vēlaties, lai to?
Ja jūs uzminēt pārāk liels, jūs izšķērdēt telpā.
Ja jūs uzminēt pārāk mazs, jūs nevar saglabāt datus, vismaz
bez daudz vairāk darba.
>> Tātad šodien, pateicoties norādes, mēs varam sākt izšūšanas kopā mūsu pašu pasūtījuma
datu struktūras, un kas Patiesībā, šeit ir kaut kas
kas izskatās mazliet vairāk mistisks pēc pirmā acu uzmetiena,
bet tas ir tas, ko mēs saucam saistīts sarakstu, un tā nosaukums veida apkopots
tā.
Tas ir saraksts ar numuriem, vai šis gadījums, sarakstu numurus,
bet tas varētu būt saraksts ar kaut ko, bet tas ir saistīts kopā veidā bultām,
un lietojiet tikai minējums ar ko paņēmiens
mēs gatavojamies, lai varētu dūriens kopā,
veida, piemēram, popkorns ar vītni, saistītais saraksti taisnstūri šeit?
Tās numuri?
Kas ir pamatā valoda funkcija?
>> Mērķauditorija: Rādītājs.
>> DAVID Malan: Rādītājs.
Tātad katrs no šiem bultām šeit apzīmē rādītājs vai tikai adrese.
Tātad citiem vārdiem sakot, ja es gribu uzglabāt numuru sarakstu,
Es nevaru vienkārši saglabāt to, ja es gribu spēja augt un sarauties
mans datu struktūra masīvā.
Tāpēc man ir nepieciešams, lai būtu nedaudz vairāk izsmalcinātība,
bet paziņo, ka šis bilde veida iesaka
ka, ja jūs esat tikko got maz pavedieni savieno visu kopā,
iespējams, nav tik grūti, lai atbrīvotu vietu starp diviem no šiem taisnstūriem
vai divi no šiem punktiem, jo ​​mēs sāksim aicinot tos, izveidot jaunu mezglu,
un tad ar kādu jaunu pavedienu, tikai grāvis trīs mezglus kopā,
pirmais, pēdējais, un viens ka jūs vienkārši ievietota vidū.
>> Un tiešām saistīts saraksts, atšķirībā no masīva, ir dinamisks.
Tā var augt, un tas var sarauties un jums nav
ir jāzina, vai aprūpi iepriekš, kā daudz datu, jūs būs uzglabāšanai,
bet izrādās, mums jābūt mazliet uzmanīgiem par to, kā īstenot šo.
Tātad vispirms pieņemsim apsvērt, kā mēs ieviest viens no šiem mazajiem taisnstūri.
Tas ir viegli īstenot int.
Jūs vienkārši teikt int n un tad jūs saņemsiet 4 baiti uz int,
bet kā es varu saņemt int, to sauc par n, un tad rādītājs, sauksim to blakus.
Mēs varētu aicināt šos lietas, kaut ko mēs gribam
bet man ir nepieciešams pasūtījuma datu struktūra.
Yeah?
>> Mērķauditorija: Ampersand [nedzirdama].
>> DAVID Malan: Tātad Ampersand mēs izmantosim, lai iegūt adresi mezglā potenciāli.
Bet mums ir vēl viens iezīme C kārtība
sniegt man iespēju izveidot Šī tradīcija taisnstūris, šis pasūtījuma
mainīgais ja jūs, atmiņā.
Mērķauditorija: struct.
DAVID Malan: struct.
Atsaukt no pagājušajā nedēļā, mēs iepazīstinājām struct, šis samērā vienkāršs atslēgvārds
kas ļauj mums padarīt lietas, kā šis.
C nenāca ar datiem struktūru sauc students.
Tas nāk ar int un peldēt un palijas un piemēram, bet tas nenāk ar studentu,
bet mēs varam radīt students datu tipu, students struktūra, ar šo sintaksi
šeit.
Un jūs redzēsiet šajā atkal un atkal.
Tāpēc nav jāuztraucas par iegaumēšanas atslēgvārdus,
bet atslēgvārds, kas ir svarīgi, ir tikai fakts, ka mēs teica struct
un tad mēs to sauca students un iekšpusē Studenta bija vārds un māja
vai kopmītnes vai tamlīdzīgi.
>> Un tā nu šodien, pieņemsim ierosināt šo.
Es esmu pievienojis dažus vārdus, bet, ja es gribu lai īstenotu šo taisnstūri, kas ir
ieguva gan int un A rādītājs, jūs zināt, ko, es esmu
gatavojas pasludināt struct sauc mezglā.
Es esmu arī, iekšpusē tā, gatavojas teikt ka mezglā, šis taisnstūris, ir int
un mēs to saucam n un tas ir nākamais rādītāju.
Un tas ir nedaudz runīgs, bet, ja jūs domājat par to,
bultas, kas bija attēlā pirms brīža ir kāda datu tipu?
Ja katra no šīm bultām ir vērsta uz ko datu struktūras veidu?
Tas nav norādot tikai uz int per se.
Tas norāda uz Visa taisnstūra lieta
un ka taisnstūra lieta, mēs teicām, sauc par mezglu.
Un tā mēs veida ir rekursīvi definēt šo tādas
ka mezglā, mēs sakām, būs int sauc n
un rādītāju sauc blakus un datu struktūras veidu, kurai
ka rādītājs punkti ir acīmredzami būs struct mezglā.
>> Tātad tas ir kaitinoši runīgs un tikai, lai būtu pedantiska,
iemesls, kāpēc mēs nevaram vienkārši saku, kas atklāti
izskatās daudz vieglāk lasāmu, ir tāpēc, atgādināt, ka C lasīt
lietas, no augšas uz leju, no kreisās uz labo.
Tas nav, kamēr mēs iegūtu semikolu ka atslēgvārds mezglā patiešām pastāv.
Tātad, ja mēs vēlamies, lai būtu šāda veida ciklisks atsauce iekšpusē datu
struktūra, mums tas ir jādara, ja mēs sakām struct mezglā augšpusē, kas
dod mums garāku ceļu aprakstot šo lieta, tad iekšā mēs sakām struct mezglā,
un pēc tam tajā pašā pēdējā rindā mēs sakām, labi, C, starp citu,
zvaniet šo visu nopelt lieta mezglā un apstāties
izmantojot atslēgvārdu struct vispār.
Tātad tas ir tikai sava veida sintaktisko triks, kas galu galā ļauj mums izveidot
kaut kas izskatās tieši tāpat kā šis.
>> Tātad, ja mēs pieņemam, tagad mēs varam īstenot šo lietu C,
Kā mēs patiesībā sākt šķērso šo?
Nu, patiesībā, viss, kas mums ir jādara, ir atkārtot no kreisās uz labo pusi, un tikai
veida ievietot mezglus vai dzēst mezglus vai meklēt lietas, kur mēs gribam,
bet, lai to paveiktu, iesim uz priekšu un padarīt lietas mazliet vairāk reālu, jo tas
ir super zema līmeņa līdz šim.
Vai kāds burtiski gribētu būt pirmais?
LABI.
Nāciet uz augšu.
Kā tevi sauc?
>> DAVID: David.
DAVID Malan: David.
Prieks iepazīties.
ES arī.
Viss kārtībā.
Un mums ir nepieciešama virkne 9.
Ne tik labi, kā pirmais, varbūt.
OK, skaits 9.
Skaitlis 17, lūdzu.
Ļaujiet man iet atpakaļ nedaudz tālāk.
Number 22, lūdzu, un Kā par tālāk atpakaļ
ja es redzu kādi rokās ar visu gaismas vai nē.
Kāds ir tiek brīvprātīgi turpat.
Vai jūs vēlaties, lai nākt klajā?
Jūsu apakšdelma tiek piespiedu kārtā iet uz augšu.
OK, 17.
22.
26 nāk uz leju.
Vai kāds cits gribētu forcefully-- Nāc uz augšu.
Faktiskā brīvprātīgo.
>> Tik ļoti ātri, ja jūs puiši varētu organizēt
paši tāpat kā mezgli uz ekrāna.
Paldies.
Un jums būs 26.
Visas tiesības un ātri ievads.
Tāpēc es esmu Dāvids un jums ir arī?
DAVID: David.
DAVID Malan: Un jūs esat?
JAKE: Jake.
SUE: Sue.
ALEX: Alex.
RAPHAEL: Raphael.
TAYLOR: Taylor.
DAVID Malan: Taylor.
Excellent.
Tātad šie ir mūsu brīvprātīgie par šodienu un iet uz priekšu
un novirzīt maz, ka veids, un tikai iet uz priekšu un saglabāt
turot savus numurus, kā jūs vai jūsu Pirmā pazīme un, izmantojot savu kreiso roku,
iet uz priekšu un vienkārši īstenot šīs bultas, tikko
lai jūsu kreisā roka ir burtiski norādot kāds ir jānorāda
at, un dot sev kādu, lai istabas mēs varam vizuāli redzēt jūsu rokas faktiski
norādot, un jūs vienkārši varat norādīt veida pie zemes ir labi.
>> Tātad šeit mums ir saistīts saraksts vienu, divi, trīs, četri, pieci mezgli sākotnēji,
un paziņojums, mums ir šis īpašais rādītāju sākumā, kurš ir
Galvenais jo mums ir sekot no visa garuma sarakstā kaut kā.
Šie puiši, pat ja viņi atstājuši uz labo, atpakaļ atpakaļ atmiņā,
tie faktiski var būt jebkur jo datora atmiņā.
Tātad šie puiši varētu būt stāvot jebkurā vietā uz skatuves
un tas ir labi, tik ilgi, kamēr viņi faktiski norādot uz viena no otras,
bet, lai saglabātu lietas tīrs un vienkāršs, mēs
vienkārši izdarīt tos kreisās uz labo, piemēram, tas, bet tur varētu būt masveida trūkumi
starp šiem mezgliem.
>> Tagad, ja es gribu, lai faktiski ievietot dažus jaunā vērtība, iesim uz priekšu un darīt to.
Mums ir iespēja tagad izvēlēties citu mezglu.
Informējiet Sāksim off ar mallocing 55.
Vai kāds prātā, ir malloc?
OK, nākt uz augšu.
Kā tevi sauc?
RAINBOW: Rainbow.
DAVID Malan: Rainbow?
Viss kārtībā.
Malloc Rainbow.
Nāciet uz augšu.
Tāpēc tagad mums ir jāuzdod sev algorithmically kur mēs varam likt 55.
Tātad mēs visi zinām, protams, ja viņa, iespējams,
pieder, ja mēs cenšamies saglabāt šo sakārtoti
Un, ja jūs puiši varētu veikt vienu soli atpakaļ tāpēc mums nav nokrist
posms, tas būtu lieliski.
Tātad faktiski, Rainbow, sāktu vairāk šeit kopā ar mani,
jo mēs kā datoru tagad varat redzēt tikai vienu mainīgo laikā.
Tātad, ja tas ir pirmais mezgls.
Ievērojiet, viņš nav mezglu, viņš ir tikai rādītājs,
un tas ir iemesls, kāpēc viņš ir izstrādāts, lai būtu tikai lielums rādītājs, ne
viens no tiem pilna taisnstūri.
Tātad mēs ejam, lai pārbaudītu katrā atkārtojuma ir 55 mazāk nekā 9?
Nē.
Ir 55 mazāk nekā 17?
Nē.
Mazāk nekā 22?
Mazāk nekā 26?
Mazāk nekā 34?
Un tāpēc tagad, acīmredzot Rainbow pieder beigās.
Tātad, lai būtu skaidrs, un to, kas bija jūsu vārds, Taylor?
>> TAYLOR: Taylor.
DAVID Malan: Tātad starp Taylor kreiso roku un varavīksnes rokas šeit,
kuru puses ir nepieciešams norādīt uz to, kas Lai ievietotu 55. šajā sarakstā?
Kas mums jādara?
Yeah?
>> Mērķauditorija: Taylor hand nepieciešams norādīt kreisi.
>> DAVID Malan: Tieši tā.
Tātad ievietojot mezglu uz saraksta beigās
ir diezgan vienkārša, jo Taylor tikko ir punktam, tā vietā, lai pie zemes
vai mēs to saucam null, null ir sava veida trūkuma
par rādītāju vai īpašu nulle rādītājs, jūs esat
gatavojas atzīmēt ar kreiso roku pie varavīksnes un tad Rainbow,
Kur kreiso roku iespējams norādīt?
Down.
Tas nav labi, ja viņas roka ir sava no norādot off šeit vai veida jebkurš
kādā veidā.
Tas būtu jāuzskata atkritumu vērtība,
bet, ja viņa norāda uz daži zināmā vērtība, mēs
to sauc nulle vai null, tas ir OK jo mums ir terminu šis
un mēs zinām saraksts tagad ir pabeigta.
>> Tātad, kas ir vēl viens samērā vienkārša lieta?
Mēs varētu malloc 5?
Nāciet uz augšu.
Kā tevi sauc?
Tiffany: Tiffany.
DAVID Malan: Es atvainojos?
Tiffany: Tiffany.
DAVID Malan: Tiffany.
Viss kārtībā.
Tiffany ir malloced ar vērtību 5.
Nāciet uz augšu.
Tas viens ir salīdzinoši viegli pārāk, bet pieņemsim apsvērt kārtību operāciju tagad.
Tas bija diezgan viegli ar Taylor beigās.
Skaits 5, protams mazāks par 9, un tāpēc mums ir Dāvidu, mums ir Tiffany,
un kāda bija jūsu vārds?
>> JAKE: Jake.
>> DAVID Malan: Jake.
Tiffany, Jake, un David.
Kuru roka būtu jāatjaunina vispirms?
Ko jūs vēlaties darīt šeit?
Tur ir pāris iespējamie veidi, bet tur ir arī viens vai vairāki nepareizi veidi.
>> Mērķauditorija: Sāciet ar visvairāk pa kreisi.
>> DAVID Malan: Sāciet ar kreisās malas.
Kurš ir visvairāk pa kreisi šeit tad?
Mērķauditorija: First.
>> DAVID Malan: OK.
Tātad, sākt ar pirmo un kur jūs vēlaties atjaunot Dāvida rokās būt?
Mērķauditorija: Ceļā uz 5.
DAVID Malan: OK.
Tātad David, punkts, pieci vai Tiffany šeit, un tagad?
>> Mērķauditorija: Tiffany norāda uz 9?
DAVID Malan: Perfect, izņemot mīkstās s vadītājs tikko veida nokrita, vai ne?
Jo to, kas ir nepareizi ar šo attēlu burtiski?
Mērķauditorija: Nekas ir vērsta.
DAVID Malan: Nekas nav norādot uz Jake tagad.
Mēs esam burtiski bāreņiem 9 un 17, un mēs esam burtiski
noplūda visu šo atmiņu, jo, atjaunināšanu Dāvida roku pirmkārt, tas ir
fine ciktāl tas ir pareizi norādot Tiffany tagad,
bet, ja neviens nebija Foresight norādīt uz Jake,
tad mēs esam zaudējuši kopums šajā sarakstā.
Tātad pieņemsim atsaukt.
Tā, ka bija laba lieta paklupt bet pieņemsim labot tagad.
Ko mums vajadzētu darīt vispirms vietā?
Yeah?
>> Mērķauditorija: Tiffany ir jānorāda pie 9?
DAVID Malan: Es nevaru iegūt, ka jums tuvu.
Kas jānorāda uz 9?
>> Mērķauditorija: Tiffany.
>> DAVID Malan: Labi.
Tātad Tiffany būtu pirmais punkts pie 9.
Tātad Tiffany jāņem uz identisku vērtību
Dāvidam, kas, šķiet, lieks uz brīdi,
bet tas ir labi, jo tagad, otrais solis, mēs varam atjaunināt Dāvida roku
norādīt pie Tiffany, un pēc tam, ja Mēs tikko veida tīras lietas augšu
it kā tas ir sava veida pavasara līdzīgu, tagad tas ir pareizs ievietošanas.
Tik lielisks.
Tāpēc tagad mēs esam gandrīz tur.
Pieņemsim ievietot vienu gala vērtība kā vērtību 20.
Ja mēs varētu malloc vienu pēdējo brīvprātīgais?
Nāciet uz augšu.
Tātad šis ir nedaudz vairāk viltīgs.
Bet tiešām, kodu mēs esam rakstiski, gan mutiski,
ir tāpat kā ar ķekars no tā, ja apstākļi tagad, vai ne?
Mums bija nosacījums pārbaudot, vai tā pieder
beigās, varbūt sākumā.
Mums vajag kādu cilpa uz atrast savu vietu vidū.
Tātad, pieņemsim darīt ar to, kas ir jūsu vārds?
>> ERIC: Eric.
>> DAVID Malan: Eric?
Eric.
Prieks iepazīties.
Tātad mums ir 20.
Mazāk nekā pieci?
Nē.
Mazāk nekā deviņi?
Nē.
Mazāk nekā 17?
Nē.
LABI.
Viņš pieder šeit un Jūsu vārdi atkal ir?
SUE: Sue.
DAVID Malan: Sue.
ALEX: Alex.
DAVID Malan: Sue, Alex, un?
ERIC: Eric.
DAVID Malan: Eric.
Kuru rokās ir nepieciešams, lai saņemtu atjauninātu vispirms?
>> Mērķauditorija: Eric.
LABI.
Tātad Ērika jānorāda pie kur?
Pie 22.
Labs.
Un tagad ko tālāk?
Sue tad var norādīt pie Eric un tagad, ja jūs puiši vienkārši
veikt dažas telpa, kas ir labi vizuāli, tagad mēs esam darījuši ievietošanas.
Tātad pieņemsim tagad izskatīt kādu jautājumu, bet paldies jums tik daudz par mūsu brīvprātīgajiem.
Ļoti labi darīts.
Jūs varat saglabāt tos, ja vēlaties.
Un mums ir jauki atvadīšanās dāvana, ja jūs katrs vēlētos izmantot stresa bumbiņu.
Ļaujiet man tikai nodot šo leju.
Tātad, kas ir takeaway par šo?
Tas, šķiet, ir pārsteidzošs ciktāl mēs esam tagad
ieviesa par alternatīvu masīvs, kas nav tik ierobežota
masīvs kādu noteiktu lielumu.
Tās var augt dinamiski.
>> Bet, līdzīgi kā mēs esam redzējuši nedēļās pagātnē, mēs nekad neko par brīvu,
tāpat protams tur ir kompromiss šeit.
Tātad ar otrādi par saistītu saraksts, tas ir dinamisms?
Šī spēja augt un atklāti, mēs būtu varējuši izdarīt izdzēst
un mēs varētu sarukt, kā nepieciešams.
Ko cena mēs maksā?
Divreiz tik daudz telpu, pirmkārt.
Ja paskatās uz attēlu, vairs es esmu uzglabājot sarakstu veseli skaitļi.
Es esmu uzglabājot sarakstu skaitļu plus norādes.
Tāpēc es esmu dubultojot daudzumu telpā.
Tagad, varbūt, ka tas nav tāds liels galā 4 baiti, 8 baiti,
bet tas, protams, var pievienot up lielu datu kopu.
Kas ir vēl viens mīnuss?
Yeah?
>> Mērķauditorija: Mums traversa viņiem vienu pa vienam.
DAVID Malan: Jā.
Mums ir traversa viņiem vienu pa vienam.
Jūs zināt, kas mēs pametusi šo super ērts iezīme kvadrātiekava
apzīmējums, pareizāk pazīstams kā brīvpiekļuves,
kur mēs varam vienkārši lēkt atsevišķam elementam
bet tagad, ja man vēl bija Mani brīvprātīgie šeit,
ja es gribēju atrast skaitlis 22, es nevaru vienkārši
pāriet uz kronšteins kaut ko kaut ko.
Man ir jāskatās pāri sarakstam, daudz tāpat kā mūsu meklējot piemērus lineāri,
lai atrastu numuru 22.
Tāpēc mēs, šķiet, ir jāmaksā cena tur.
Bet mēs varam tomēr risināt citas problēmas.
>> Patiesībā, ļaujiet man iepazīstināt tikai pāris Visuals.
Tātad, ja jūs esat bijis uz leju, lai Mather s Dining Hall nesen,
jums atgādināt, ka viņu skursteņi paplātes kā šis,
mēs aizgūts no šiem Annenberg pirms klasē.
Tātad šī kaudze paplātes, lai gan, tiek uzrādīts faktiski
par datorzinātņu datu struktūra.
Ir datu struktūra datorzinātnēs
pazīstams kā kaudze, kas ļoti labi pakļauj sevi tieši šis vizuālais.
Tātad, ja katrs no šiem paplātes nav paplāte bet, piemēram, vairākām un es gribēju
uzglabāt skaitļus, es varētu likt vienu uz leju šeit,
un es varētu likt citu šeit lejā, un turpināt kraušanas numurus
par vienu virs otra, un kas ir potenciāli noderīgi par šo
ir tas, kāda ir saistība Šīs datu struktūras?
Kuru skaits var izraut Pirmais visvairāk ērti?
Visvairāk nesen viens Uzvelciet tur.
>> Tātad, tas ir tas, ko mēs varētu zvanīt datorzinātnes LIFO datu struktūra.
Pēdējais iekšā, pirmais ārā.
Un mēs redzēsim pirms ilgi, kāpēc kas varētu būt noderīga, bet tagad,
vienkārši apsvērt īpašumu.
Un tas ir sava veida stulba, ja jūs domājat, ka par to, kā ēdamzāle to dara.
Katru reizi, kad viņi tīras paplātes un likt svaigi tiem virsū,
Jums varētu būt iepriekš tīrs bet galu galā ļoti netīrs un putekļains
paplāte pašā apakšā ja jums nekad nav
nokļūt uz apakšā, kas kaudze, jo jūs vienkārši
paturēt liekot jauno un tīro tie uz augšu no tā.
Tas pats varētu notikt lielveikalā too.
Ja jums ir displeja apvalks piena un katru reizi CVS
vai kurš saņem vairāk piena, jūs vienkārši bāzt piens
Jums jau ir atpakaļ un jūs varat ievietot jaunas up front,
Jums nāksies dažas diezgan šķebinošs piens beigās datu struktūru,
jo tas vienmēr apakšā vai līdzvērtīgi tas vienmēr ir aizmugurē.
>> Bet tur ir vēl viens veids, kā domāt par uzliku up datus un, piemēram, šis.
Ja jūs esat viens no tiem cilvēkiem, kam patīk rindā ārpus Apple veikalu
kad jauns produkts nāk out, jūs, iespējams,
neizmantojat kaudze datu struktūra, jo jums
varētu atsavināt visi, kas ir uzliku up iegādāties kādu jaunu rotaļlietu.
Drīzāk, jūs, iespējams, izmantojot kāda veida datu struktūras
vai kāda veida sistēmas reālajā pasaulē?
Cerams, ka tas ir līnija, vai vairāk pareizi vai vairāk britu, piemēram, rindā.
Un izrādās, rinda ir arī datu struktūra datorzinātnēs,
bet rinda ir ļoti atšķirīgs īpašums.
Tas nav LIFO.
Pēdējais iekšā, pirmais ārā.
Dievs pasarg.
Tā vietā FIFO.
Pirmais iekšā, pirmais ārā.
Un tas ir labi par taisnīguma "dēļ
protams, ja jūs uzliku up super agri no rīta.
Ja jums tur, pirmkārt, jūs vēlas izkļūt vispirms kā arī.
>> Un tā visus šos datus konstrukcijas, rindas un skursteņi
un ķekarus citiem, izrādās tevi var domāt par to kā tikai masīva.
Tas ir masīvs, varbūt fiksēts izmērs 4, bet tas lūdzu
būt sava veida jauki, ja mēs varētu tikai pāļu paplātes gandrīz bezgalīgi garš, ja mēs
ir, ka daudzi paplātes vai ciparus.
Tātad, varbūt mēs gribam izmantojiet saistīts sarakstu šeit,
bet kompromiss būs potenciāli ka mums ir nepieciešams vairāk atmiņas,
aizņem nedaudz vairāk laika, bet mēs neierobežo krāvuma augstums,
līdzīgi Mather s displeja apvalks varētu ierobežot izmērs kaudze,
un tāpēc tie ir dizaina lēmumus vai pieejamās iespējas, lai mums galu galā.
Tātad ar šiem datiem struktūrām, mēs esam sākuši
redzot jaunas augšējās robežas potenciāli par to, kas agrāk bija super ātri
un kur mēs ņemšu atvaļinājumu off šodien un kur
mēs ceram, ka, lai nokļūtu ir trešdien, mēs
sāk apskatīt datus struktūra, kas ļauj mums meklēt
caur datiem log beigu laiku atkal.
Un mēs redzējām, ka, atgādināt, nedēļā nulles un viens ar bināro meklēšanu vai plaisa
un iekarot.
Tas nāk atpakaļ, un vēl labāk, Svētais Grāls par šo trešdien
būs nākt klajā ar datu struktūra, kas darbojas patiešām
vai teorētiski pastāvīgs laiks, kurā
tas nav svarīgi, cik daudz miljoniem vai miljardiem lietas
mums ir datu struktūru, tas tiks ņemt mums pastāvīgu laiku, varbūt viens solis
vai divi soļi vai 10 soļi, bet pastāvīga skaits soļiem
meklēt, izmantojot šo datu struktūru.
Tas patiešām būs Svētais Grāls bet vairāk par to trešdien.
Skatīt ya tad.
>> [Mūzikas atskaņošanai]