>> [Мусиц плаиинг]
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> Он лаже.
>> О чему?
>> -Не знам.
>> -Па Шта знамо?
>> То у 9:15, Раи САНТОИА био на банкомату.
-Да.
Дакле, питање је, шта је радио у 9:16?
>> -Схоотинг На 9 милиметара у нечему.
Можда је видео снајперисту.
>> Или је радио са њим.
>> -Чекај.
Врати се један.
>> -Шта видите?
>> Донеси му лице до целог екрана.
>> Његов наочаре.
>> Ту је одраз.
>> -То Је Нуевитас бејзбол тим.
То је њихов логотип.
>> -И Он разговара са ко је носио ту јакну.
>> [Крај репродукције]
>> Давид Малан: У реду.
Ово је ЦС50 а ово је мало више од [неразумљиво] са којом сте
дабблинг са проблемом сет четири.
Данас ћемо почети да мало погледамо дубоко у тим стварима зову показивачи,
која иако је прилично волшебни тема,
испада да иде да су средства којима смо
може да почне изградњу и монтажу много софистицираније програме.
Али ми то урадио последње среде путем неког Цлаиматион првог.
Дакле, ово, опозив је Бинки и ми смо га користили
да погледамо програм који није стварно нешто интересантно,
али је открио неколико проблема.
Дакле, да почне данас, зашто не ходамо брзо кроз неколико ових корака,
покушати да дестилисати у погледу људских с шта се овде дешава
а зашто је то лоше, а онда пређите на и заправо почетак изградње нешто
са овом техником?
Дакле, то су били први Две линије у овом програму
и лаички, шта су ове две линије ради?
Неко ко је разумно удобан са оним што је проглашена на екрану?
Шта су ове две линије раде?
Није све то разликује од једне недеље,
али постоји неки нови посебан симбол.
Да?
Тамо.
>> ПУБЛИКА: Децларинг савете?
Давид Малан: Понови?
ПУБЛИКА: Децларинг савете?
Давид Малан: Децларинг показивачи и хајде да га прерадити мало више.
ПУБЛИКА: [неразумљиво] Адреса х, а затим год.
Давид Малан: И онда обрати.
Дакле, шта конкретно радимо је да се прогласи две варијабле.
Ове променљиве, међутим, иду да су типа инт звезде, која
више конкретно значи они ће за складиштење
адреса инт, респективно, Кс и И.
Сада има ли вредности?
Да ли постоје стварне адресе у овим две варијабле у овом тренутку?
Ne.
То је само тзв вредности за смеће.
Ако не, заправо доделили променљива, све што је у РАМ
претходно ће испунити нулама и они су оба од тих варијабли.
Али ми не знамо шта су и то је
ће бити кључ зашто Бинки изгубио главу прошле недеље.
>> Дакле, ово је био Цлаиматион инкарнација ово
где имате само две променљиве, мале кружне комада глине,
која може да складишти променљиве, већ као су замотане стрелице показују,
они нису у ствари указује било гдје познатим пер се.
Онда смо имали ову линију, а то је нова прошле недеље, маллоц за меморију
алокација, што је само фенси начин причања оперативни систем Линук,
или Мац ОС или Виндовс, Хеј, дај ми мало меморије,
и све што имаш да кажеш оперативни систем
је оно када га питају за меморију.
Неће да брину шта ћеш да радиш са њим,
али морате да кажете радом Систем шта путем маллоц.
Да?
>> ПУБЛИКА: Колико?
Давид Малан: Колико?
Колико у бајтовима, па ово, опет, измишљен пример, је само кажем,
дај ми величину инт.
Сада, величина инт је четири бајта или 32 бита.
Дакле, ово је само начин говорећи, хеј, оперативни систем,
дај ми четири бајта меморије да могу користити на располагању,
и конкретно, шта маллоц повратак у вези
на тај комад четири бајтова?
ПУБЛИКА: Адреса?
Давид Малан: Адреса.
Адреса тог комад четири бајтова.
Baš tako.
И то је оно што чува на крају ин к и зато нећемо стварно
занима ме шта је број који адреса је, да ли је ОКС1 или ОКС2
или неки загонетан хексадецимална адреса.
Само царе сликовито да је променљива к је сада
указујући на том меморију.
Тако је стрелица представља показивач, или тачније, успомена адреса.
Али опет, ми обично не занима ста ти стварне адресе.
Сада, ова линија каже шта у лаички?
Звезда х добија 42 зарез.
Шта ово значи?
Хоћеш да идемо?
Немојте огребати врат.
>> ПУБЛИКА: Адреса к је на 42.
>> Давид Малан: Адреса к је на 42.
Не баш.
Тако близу, али не сасвим, јер постоји звезда која је префикса ову к.
Зато морамо да подесите мало.
Да?
>> ПУБЛИКА: Вриједност да показивач х указује на је 42.
Давид Малан: У реду.
Вриједност да је показивач к је указујући на, рецимо, биће 42,
Другим речима, звезде Кс каже, идите на адресу било
у к, да ли је 1 Окфорд Улица или 33 Окфорд Стреет
или ОКС1 или ок33, како год да нумерички адреса,
звезда к је дереференцинг од Кс.
Па иди на ту адресу и затим ставити број 42 тамо.
Дакле, то би био еквивалент начин да се каже да је.
Тако да је све у реду, а затим бисмо представљају слику
и то где смо додали је 42 на тај комад четири
бајтова на десној страни, али Ова линија је где ствари кренуло наопако
и Бинки глава поппед са у овом тренутку,
јер лоше ствари дешавају када ви дереференце вредности за смеће
или ти дереференце неважећа показивачи, а ја кажем неважећи
јер у овом тренутку у прича, шта је унутар и?
Шта је вредност заснована и на протеклих неколико корака?
Да?
Шта је ово?
>> ПУБЛИКА: Адресу.
Давид Малан: Адресу.
Требало би да буде адреса али сам га инитиализед?
Дакле, још нисам.
Дакле, шта је познато да је тамо?
То је само вредност смеће.
То може бити било адрес од нуле до 2 милијарде ако имате два наступе РАМ-а,
или нула до 4 милијарде ако сте Имам четири гигабајта РАМ-а.
То је нека вредност смеће, али проблем је
да је оперативни систем, ако те није дао
да комад меморије специфично да покушавате да иде у,
то обично ће изазвати шта Видели смо као сегментације грешке.
Дакле, у ствари, било ко од вас који имају борила на проблеме у радног времена
или проблема који је више генерално са покушавам да схватим
Сегментатион фаулт, који генерално значи
ти додирује сегмент меморије да не би требало да буде.
Ви додирује меморију која оперативни систем нема
дозволио да дотакне, да ли је тако што ћете предалеко у својој низ
или покретање сад, да ли то је зато што си дира
меморије само је нека вредност смеће.
>> Дакле, ради СТАР Кс овде некако недефинисаног понашања.
Никада не треба да то уради, јер квоте су, програм је само да сруши,
зато што говориш, идите на ову адресу
а ви немате појма где та адреса је у ствари.
Дакле, оперативни систем вероватно ће се срушити ваш програм
као резултат и заиста, то је шта се тамо догодило Бинки.
Па на крају крајева, Бинки фиксна овај проблем са овим.
Дакле, тај програм и сама била погрешна.
Али ако некако полако напредују и уместо тога изврши ову линију,
И једнако к само значи год адреса је једно к, такође га у и.
>> И тако сликовито, имамо представља са две стрелице
од к и и из указивањем на исто место.
Дакле семантички, к једнако да и због, како оних
се чување исте адреса, Ерго показујући на 42,
а сада, када кажете звезду И, идите на адресу у и,
ово је занимљив пропратни ефекат.
Дакле, адреса у и је Исто као и адресу у к.
Дакле, ако кажете отићи на адресу у и и промените вредност на 13,
ко још утиче?
Кс је, тачка Д, да тако кажем, би требало да утиче као добро.
>> И заиста, како Ник нацртао ову слику у Цлаиматион је управо то.
Иако пратимо показивач И, завршили смо на истом месту,
па ако смо за штампање од к или и поинтее је,
онда би видели вредност 13.
Сада, ја кажем да је поинтее у складу са видеом.
Програмери, на моје знање, никада није
кажу да је реч поинтее, оно што се указује
у, али за доследност са видео, схватити
то је све што је било значи у тој ситуацији.
Тако да било питања о Цлаиматион или показивачи или маллоц још увек?
Ne?
У реду.
>> Дакле, без даљег АДО, хајде да погледамо
у којој овај има стварно се користи за неко време.
Тако да смо имали тај ЦС50 библиотеку да има све ове функције.
Користили смо Тонированние много, ГетСтринг, Вероватно ГетЛонгЛонг раније
у мом ПСет један или тако, али шта се заправо дешава?
Па, хајде да кратак поглед испод хаубе на програма који
инспирише зашто Нудимо вам дати ЦС50 библиотека, и заиста од прошле недеље,
почели смо узимајући оне тренинг точкови офф.
Дакле, ово је сада поредани од онога што обдукцију
траје унутар ЦС50 библиотеци,
иако сада ће почети да помера далеко од тога за већину програма.
>> Дакле, ово је програм који се зове сцанф 0.
То је супер кратак.
Важно је само ове редове, али је уводи функција се зове сцанф
да ћемо заправо видети у тренутак унутар ЦС50 библиотеке,
додуше у мало измењеном облику.
Дакле, овај програм он лине 16 се прогласи променљиве к.
Дакле, ми четири бајта за инт.
То је говорио корисника, број молим вас, а затим
ово је занимљив линија која у ствари везује заједно прошле недеље
и ово.
Сцанф, а затим приметити да траје формат стринг, баш као принтф,
% и означава инт, а онда траје Други аргумент који изгледа мало
фанки.
То је Амперсанд х, и да се присети, смо видели само овај пут прошле недеље.
Шта Амперсанд х представља?
Шта Амперсанд ради у Ц?
Да?
>> ПУБЛИКА: Адреса.
Давид Малан: Адреса.
Дакле, то је супротно оператера звезда,
док је оператер звезда каже, идите на ова адреса, амперсендом оператер
каже, схватим адреса ове варијабле,
па ово је кључно, јер сцанф је сврха у животу
је да скенира корисник је унос са тастатуре,
у зависности шта год он или она типови, а затим читати улаз тог корисника
у променљивој, али смо видео у протекле две недеље
да је замена функција које смо Покушао напора да спроведе
Само сам сломљена.
Подсетимо се да са свап функцијом, ако смо прогласили А и Б, као интс,
успешно сте заменимо две варијабле унутрашњост свап
баш као и са млеком и ОЈ, али чим замена вратио,
какав је био резултат у односу да Кс и И, оригинална вредности?
Ništa.
Да.
Ништа се није десило тог времена, јер свап променити само своје локалне копије,
што ће рећи, све овај пут, кад год имамо
пролазио у аргументима функцијама, ми смо
само у пролазу копије тих аргумената.
То можете урадити са тим шта год желиш са њима,
али они ће имати нема Ефекат на првобитне вредности.
Дакле, ово је проблематично ако вас Желим да имају функцију као сцанф
у животу, чија је сврха да скенира Унесите корисника са тастатуре
а затим попуните празнине, тако да говори, односно дати варијаблу попут к
вредност, јер ако сам ја само да прође Кс да сцанф,
ако узмете у обзир логику прошле недеља, сцанф може да уради шта год хоће
са копијом к, али није могао трајно променити к осим ако дајемо
сцанф мапу блага, да тако кажем, где Кс Маркс Тхе Спот, при чему
пролазимо у адреси к тако да сцанф да одемо тамо и заиста промене
вредност к.
И тако заиста, све да овај програм ради
ако направим сцанф 0, по мом извору 5м директоријум, да сцанф 0,
дот сласх сцанф, број молим те 50, хвала за 50.
>> Дакле, то није све тако интересантно, али шта се заиста дешава
је да чим ја зовем сцанф овде, вредност к
се трајно променила.
Дакле, ово изгледа лепо и добро, ау ствари,
Изгледа као да не стварно треба ЦС50 библиотека уопште више.
На пример, хајде да ово још једном овде.
Дозволите ми да поново за секунду.
Хајде да пробамо број молим и уместо да каже 50 као и раније,
Рецимо не.
ОК, то је мало чудно.
ОК.
И само неке глупости овде.
Дакле, не изгледа да хандле погрешне ситуације.
Зато морамо да минимално старт додајући мало Еррор-цхецкинг
да се уверите да корисник има откуцан у стварном броју као 50,
јер очигледно куцањем речи није откривена као проблематичан,
али вероватно би требало да буде.
>> Хајде да погледамо ову верзију сада је то мој покушај да реимплемент ГетСтринг.
Ако сцанф има све ово функционалност изграђена,
Зато смо се опробам са овим тренинг точкови као ГетСтринг?
Па, овде је можда моја једноставна верзија ГетСтринг
при чему пре недељу дана, можда сам рекао, дај ми стринг и назвати то буффер.
Данас, ћу почети само рекавши цхар звезду, која је, подсјетимо,
то је само синоним.
Изгледа страшније, али је исту ствар.
Зато ми дај променљиву зове буффер који ће да сачувате стринг,
реци корисника стринг молим вас, и онда, као и раније,
хајде да покушамо да позајмим ову лекцију сцанф % је ово време и онда прође у бафер.
Сада, брзо проверу исправности.
Зашто ја не говорим Амперсанд буффер овај пут?
Закључити из претходног примера.
ПУБЛИКА: Знак звезда је показивач.
Давид Малан: Тачно, јер овај пут, цхар
звезда је већ показивач, адреса, по дефиницији тог звезде се тамо.
А ако сцанф очекује адресе, довољно је само да прође у бафер.
Не треба рећи амперсанд бафер.
За радознале, можеш урадите нешто овако.
То би имало другачије значење.
Ово ће вам дати показивач да показивачем, који је заправо
валидна ствар у Ц, али за Сада, нека буде једноставно
и задржати причу доследан.
Само ћу проћи у буффер и то је тачно.
Проблем иако је то.
Пусти ме само напред и покрените ово Програм након што састављања.
Направи сцанф 1.
Проклетство, мој преводилац је хватање своју грешку.
Дај ми секунду.
Цланг.
Рецимо сцанф-1.ц.
ОК.
Ево га.
Треба ми.
ЦС50 ИД има разних Подешавања конфигурације
који вас штити од себе.
Морао сам да се онемогући оне стране руннинг цланг ручно овај пут.
Дакле, низ молим те.
Ја идем напред и унесите у мом омиљеном Хелло ворлд.
У реду, нула.
То није оно што сам откуцао.
Дакле, то је показатељ нешто што није у реду.
Пусти ме само напред и унесите у заиста дугу линију.
Хвала за нулл, а ја не знам ако ћу бити у могућности да га сруши.
Хајде да пробамо мало копију пасте и види да ово помаже.
Само пасте много тога.
То је дефинитивно већи низ него обично.
Хајде да то стварно пишем.
Ne.
Проклетство.
Цомманд нот фоунд.
Дакле, то је повезано.
То је зато што сам залепио неке лоше карактера,
али ово испостави се не иде на посао.
>> Хајде да пробамо ово још једном, јер то је више забавно да заправо срушити.
Хајде да ово писем и сад, ја сам да копирате стварно дуг низ
а сада да видимо да ли смо могу срушити ову ствар.
Обратите пажњу на сам пропустио простора и нове линије и зарез
и сви функи знакова.
Ентер.
И сада мрежа је само био спор.
Држао сам доле Цомманд-В предуго, јасно.
Проклетство!
Цомманд нот фоунд.
>> ОК.
Па, поента је ипак следеће.
Дакле, шта се заправо догађа са овом декларацијом
од цхар стар тампон он лине 16?
Дакле, оно што сам ја добити када сам прогласити показивач?
Све сам се четири бајт вредност зове бафер, али оно што је унутар ње
овог тренутка?
То је само вредност смеће.
Зато сваком тренутку можете прогласити променљиву ин Ц, то је само нека вредност смеће,
и почињемо да путовање преко ове реалности.
Сада, када кажем сцанф, идите на ову адресу
и ставити без обзира на типове корисника у.
Уколико корисник укуцава здраво свет, па, гдје сам га ставио?
Буффер је вредност смеће.
>> Дакле, то је као стрела који показује ко зна где.
Можда је то указује овде у мом сећању.
И тако, када корисник врсте у свету, хелло
програм покушава да ставио стринг Хелло Ворлд обрнута коса црта 0
У том меморију.
Али са великом вероватноћом, али свакако није 100% вероватноће,
рачунар ће се срушити онда програм јер то није
меморија ми треба дозволити да дотакне.
Дакле укратко, овај програм је мањкав баш из тог разлога.
Ја суштински не раде оно?
Које кораке имају сам пропустио, као и ми изостављен са Бинки је први пример?
Да?
>> ПУБЛИКА: алокација меморије?
>> Давид Малан: алокација меморије.
Нисам заиста издваја свака меморија за тај низ.
Дакле, можемо поправити у неколико начина.
Један, можемо га задржати једноставно и, у ствари, сад си
ће почети да види замућења линија између онога што
низ је, шта је стринг, какав Чар звезда је, шта је низ карактера
је.
Ево други пример укључујући и гудаче обавештења
све сам урадио он лине 16 је, уместо да каже
да бафер ће бити Чар звезда, показивач на комад меморије,
Ја ћу врло проактивно дају ја тампон за 16 карактера,
и, у ствари, да ли сте упознати са појмом баферовања,
Вероватно из света видео, где је видео је баферовање, бафер,
међупохрана.
Па, шта је ту је веза?
Па, унутар ИоуТубе и унутар видео плејера
генерално је низ која је већа од 16 година.
То може бити низ од величине једног мегабајт, можда 10 мегабајта,
и у тај низ иоур бровсер доес скидање гомилу бајтова,
читава гомила мегабајта видео и видео плејер,
ИоуТубе је или ко је, почиње читајући бајтова из тог низа,
и сваки пут када видите Реч баферовање, бафер,
то значи да играч има стечен до краја тог низа.
Мрежа је тако спора да није рефиллед је низ са више бајтова
па ти си ван битова за приказ кориснику.
>> Дакле, бафер је погодан термин овде да то је само низ, комад меморије.
И то ће га поправити јер се испоставило
да можете третирати као да низове они су адресе, иако буффер
је само симбол, то је низ знакова, тампон,
то је корисно за мене, програмер, можете проћи своје име око
као да се ради о показивач, као да
били адреса на комад меморије за 16 карактера.
Дакле, то је да кажем, може да прође сцанф управо та реч
па сад, ако направим овај програм, да сцанф 2, тачка коса црта сцанф 2,
и укуцајте Хелло Ворлд, Унесите, да времена-- готово
>> Хм, шта се десило?
Стринг молим те.
Шта сам урадио погрешно?
Здраво свете, бафер.
Здраво Свете.
Ах, знам како се то ради.
ОК.
Тако да је читао до првог простору.
Па хајде да варају само на тренутак и Само сам хтео реци да откуцате нешто
Заиста дуго овако је дугачка реченица То је један, два, три, четири, пет,
шест, седам, осам, девет, 10, 11, 12, 13, 14, 15, 16.
ОК.
То је заиста дуга реченица.
Дакле, ова реченица дуже од 16 знакова
па кад сам ударио Ентер, шта ће се десити?
Па, у овом слу ~ ају прича, сам прогласио бафер
да стварно буде низ са 16 слова спремни да иду.
Дакле, један, два, три, четири, пет, шест, седам, осам, девет, 10, 11, 12, 13, 14,
15, 16.
Дакле 16 карактера, и сада, када сам прочитајте у нечему овако је дугачак
реченица, шта ће се догодити ис да ћу да прочитам у то је дуг
С е-Н-т-е-Н = Ц-Е реченица.
>> Дакле, ово је намерно лоша ствар коју сам
држати писање изван границе мог низа,
изван граница мог бафер.
Могао бих се посрећи и програм ће Кееп Он Руннинг и није ме брига,
али генерално говорећи, овај ће заиста срушити мој програм,
и то је грешка у мом Кодирамо тренутак сам корак
изван граница те низа, јер ја
не знам да ли је нужно ће се срушити
или ако ћу да се посреци.
Дакле, ово је проблематично зато што у овај случај, изгледа да ради
и хајде да искуша овде судбину, иако ИДЕ изгледа да толерише доста
од--
>> Ево га.
Коначно.
Тако да сам ја једини који може да види ово.
Тако да сам имао много забаве куцања од веома дуго стварне фразе
да сигурно прелази 16 бајта, зато И
откуцан у овом лудом дугом мулти-лине фраза, а затим приметио шта се догодило.
Програм је покушао да штампа а затим добио сегментације грешку
и сегментације грешке када деси овако нешто
и оперативни систем, каже Не, не може дотаћи ту меморију.
Идемо да убијемо Програм у потпуности.
>> Дакле, ово изгледа проблематично.
Ја сам унапредио програм којим макар мало меморије,
али ово се чини да ограничи функција ГетСтринг да се
низови неком коначном дужине 16.
Дакле, ако желите да подржите више казне од 16 карактера,
чиме се бавиш?
Па, можете повећати размер тампон до 32
или да изгледа некако кратко.
Зашто не бисмо само да је 1.000, али одгурне.
Шта је одговор на интуитивно само избегавање овај проблем тако што
мој бафер већи, као и 1.000 карактера?
Реализацијом ГетСтринг на овај начин.
Оно што је добро или лоше овде?
Да?
ПУБЛИКА: Ако везати до много простора и не користите,
онда не можете преусмјерити тај простор.
Давид Малан: Апсолутно.
То је расипање утолико што ако не у ствари треба 900 оних бајтова
а ти тражиш 1.000 укупно сваком случају,
ти само одузима више меморије на рачунару корисника него што је потребно,
и после свега, неки сте већ наишли
у животу кад си ради пуно програма
и они изједа много меморије, ово може стварно утиче на перформансе
и искуство корисника на рачунару.
Дакле, то је нека врста лењ решење, сигурно, и обратно,
није само расипање, шта Проблем и даље остаје, чак и ако направим свој буффер
1000?
Да?
>> ПУБЛИКА: Низ је дужина 1.001.
Давид Малан: Управо тако.
Ако је ваш стринг дужине 1.001, имате тачан исти проблем,
и мог аргумента, ја бих само онда направи 2000,
али не знате у напредују колики би требало да буде,
па ипак, морам да састави свој програм Пре него остављајући људи користе и за преузимање
to.
Дакле, ово је управо врста ствари које су ЦС50 библиотека покушава
да нам помогне са и ми ћемо само поглед неке од основних имплементације
овде, али ово је ЦС50 тачка Ц. Ово је фајл који је био на ЦС50 ИДЕ
Све ове седмице да сте користили.
То је пре саставио и ти си је користио аутоматски
по природи који има дасх Л ЦС50 заставу са кланг,
али ако спустимо кроз све ове функције, ево ГетСтринг,
и само да ти дам Укус шта се дешава,
хајде да на брзину погледамо релативна комплексност.
Није лонг функција, али нисмо
морамо да мислимо сви напорно о како да о томе да конце.
>> Дакле, овде је мој тампон и ја очигледно је иницијализујемо нулл.
Ова је, наравно, је иста ствар као цхар звезда,
али сам одлучио имплементацију ЦС50 библиотеку
да ако ћемо бити потпуно динамичан,
Не знам унапред колики корисници стринг ће желети да.
Зато ћу за почетак са само празан стринг
и ја ћу изградити толико меморија као што сам треба да одговара за корисника стринг
и ако немам довољно, ја ћу да питам
оперативни систем за више меморије.
Ја ћу прећи њихов стринг у већу комад меморије
и ја ћу објавити или ослободити недовољно велики део меморије
а ми ћемо само да се ово уради итеративно.
>> Дакле, брз поглед, Овде је само променљива
са којим ћу пратити капацитета мог пуфера.
Колико бајтова могу да стане?
Овде је променљива н с које ћу задржати
прати колико бајтова заправо у тампон или да је корисник откуца.
Ако нисте видели ово раније, те може одредити да се променљива као инт
није потписан, који као што име сугерише, значи да је не-негативна, и зашто би
Ја никада желим да сметам наводећи да инт није само инт,
али то је грозен Инт?
То је не-негативни Инт.
Шта [неразумљиво] значи?
>> ПУБЛИКА: То је описивао количину меморије која може бити [неразумљиво].
>> Давид Малан: Да.
Дакле, ако кажем непотписани, ово је заправо дајући вам један мало додатне меморије
и чини помало шашаво, али ако има један мало додатну меморију, да
значи да два пута имати колико Вредности можете представљају,
јер може бити 0 или 1.
Дакле по дефаулту, инт може бити грубо негативна 2 милијарде скроз
до позитивног 2 милијарде.
То су велике опсега, али ипак је некако расипан
ако само стало величине, што само интуитивно
треба да буде нон-негативна или позитивна или 0, па онда,
Зашто трошиш 2 милијарде могуће вредности за негативне бројеве
ако никада ћеш да их користите?
Дакле, рекавши непотписани, сада је мој инт могу бити између 0 и око 4 милијарде.
>> Дакле, овде је само инт ц разлога нећемо ући сада као
зашто је уместо инт од цхар, али овде је
суштина онога што се дешава о, а неки од вас
можда коришћењем, на пример, фгетц функција чак иу ПСет четири
или након тога ћемо видети опет у проблему сет пет,
фгетц је лепо, јер као назив врста, врста арцанели сугерише,
то је функција која добија карактер и тако,
шта је фундаментално другачије о томе шта радимо у ГетСтринг
је да не користимо сцанф на исти начин.
Само се постепено дуж корак-по-корак над шта год је корисник откуца,
јер увек можемо издвојити један Чар, па можемо увек безбедно
погледај једном цхар истовремено, и магија почиње да се деси овде.
Идем да спустимо до средњи ове функције
само да укратко ову функцију.
Много као да је маллоц функција, ту је
реаллоц функција где реаллоц омогућава вам да прерасподели комад меморије
и чине га већи или мањи.
Тако скратим причу и са талас моје руке за данас,
знам да је оно што ГетСтринг ради се некако то
од магично расте или скупљање бафера као корисника
типа у његовом низу.
>> Дакле, ако корисник откуца кратки низ, овај код
Само издваја довољно меморије да одговара стринг.
Уколико корисник настави куцање као што сам га опет и опет урадио
и опет, добро, ако бафер је првобитно ова велика
а програм реализује, да чекај мало, ја сам из простора,
да ће се удвостручити величина пуфера
и потом два величину бафера и код који ради на дуплирање,
ако гледамо овде, то је само овај паметан-Линер.
Можда ниси видела ову синтаксу пре, али ако ви кажете звездице једнако,
ово је иста ствар као рекавши капацитета пута 2.
Тако да само држи удвостручавање капацитет пуфера
и онда говори Реаллоц дати Сама је много више меморије.
>> Сада, као на страну, тамо и друге функције у овде
да нећемо гледати у сваком детаљу осим да покаже Тонированние,
користимо ГетСтринг у Тоноване.
Ми цемо проверити да није нулл, која, опозив,
је посебна вредност која значи нешто није у реду.
Ми смо из меморије.
Боље проверите за то.
И ми вратити сентинел вредност.
Али ја ћу одложити на коментаре као да зашто и онда користите ову рођака сцанф
зове ссцанф и испоставило се да ссцанф, или стринг сцанф,
омогућава вам да погледате линије да корисник је укуцали и нека вас
анализира га у суштини и шта сам радиш овде се Кажем ссцанф,
анализира шта год корисник има унесе и уверите се да% и,
постоји цео број у њему, и нећемо ући у данас тачно зашто ту је
А% Ц овде, али да у суштини омогућава да открије да ли је корисник откуца
у нечему лажне после броја.
Дакле, разлог због којег Тоноване и ГетСтринг да ти кажем да поновите, поновите, ретри
је због свих да код смо написали,
То је нека врста гледа на улазу корисника у прављењу сигурни да је потпуно нумерички
или је то стварни Флоатинг Поинт Валуе или слично,
зависно од тога шта вредности функционишу користите.
>> Ух.
ОК.
То је био залогај али поента овде
да је разлог смо имали они точкови за обуку на
јер је на најнижем нивоу, Постоји само толико ствари које
може да крене наопако да смо хтели да превентивно руковање
те ствари сигурно у Најранији недеље класе,
али сада са ПСет четири и пет и ПСет изван видећете да је то више до
сте већ сте способнији решавања тих врсте проблема
сами.
Сва питања о ГетСтринг или Тоноване?
Да?
>> ПУБЛИКА: Зашто би удвостручити капацитет пуфера
а не само повећање то је тачан износ?
>> Давид Малан: Добро питање.
Зашто бисмо удвостручи капацитет пуфера, за разлику
да само нападу неки константној вредности?
То је била одлука дизајн.
Управо смо одлучили да зато што има тенденцију да бити мало скупо време мудро да питам
оперативни систем за меморију, нисмо
Желим да завршим улазак у ситуација за велике стрингс
да смо тражи изнова и изнова ОС
и опет и опет у брзи сукцесије за памћење.
Зато смо одлучили, донекле произвољно, али се оправдано надамо,
да, знате шта, хајдемо покушати да пред руду
и само наставите да дуплирањем тако да смо минимизирати број пута
морамо да зовемо маллоц или реаллоц, али је укупно пресуда
позове у одсуству знања шта корисници можда желети да куцате.
Оба начина може да буде дискутабилно.
Вероватно добро.
>> Дакле, хајде да погледамо неколико других споредних ефеката меморије,
ствари које могу да пођу наопако и алата које можете
користе да ухвати овакве грешке.
Испоставило се да сви ви, иако цхецк50 није вам рекао колико,
су писање луд Код од недеље један,
чак и ако су сви тестови су цхецк50 прошло, а чак и ако ви и ваш ЕЦ
су супер уверени да Ваш код ради како треба.
Ваш број је био луд или мањкав у томе сви ви,
у коришћењу ЦС50 библиотеку, су цури меморију.
Си питао оперативни систем за памћење у већини програма
ви сте написали, али ти си Никада заправо враћен.
Ви сте звали ГетСтринг и Тоноване и ГетФлоат,
али са ГетСтринг, ти си никада није позвао унГетСтринг или Гиве
Стринг Назад или слично, али смо видели да ГетСтринг не издвоји меморију
путем маллоц или ово Функција реаллоц, који је само
веома сличан у духа, па ипак, били смо
питам оперативни систем за меморије и меморије изнова и изнова
али га никада није враћајући.
>> Сада, као на страну, испоставило се да када програм се затвара, сву меморију
се аутоматски ослобођен.
Дакле, то није био велика ствар.
Неће да разбије ИДЕ или смирим ствари,
Али када програми раде генерално процуре меморију
и трче за дуго времена.
Ако сте икада видели глупи лопта за плажу у Мац ОС или пешчани сат
на Виндовс гдје је врста успоравање или мисли или мисли
или само заиста почиње да се успори до пузања,
врло вероватно могло бити резултат цурење меморије.
Програмери који су писали софтвер користите
аск оперативни систем за меморију сваких неколико минута, сваког сата.
Али ако сте ради под софтвер, чак и ако је
минимизиран на рачунару сатима или данима на крају,
Можда се питате све више и више меморије и никада заправо користи
и тако ваш код може бити или програми можда цури меморија,
и ако почнете да цури меморија, има мање меморије за друге програме,
и ефекат је за успори све доле.
>> Дакле, ово је далеко један од Најстрашнија програми
имаћете прилике да ради у ЦС50 мери
и његова производња је још езотерички од цланг је или да или било који команде
лине програми Направили смо и раније, али срећу, уграђен у свом излазу
је неки супер корисних савета који ће бити користан или за ПСет четири
или свакако ПСет пет.
Тако валгринд је алат који се може користити да изгледа
за меморијске цурења у вашем програму.
То је релативно једноставно да ради.
Покренули сте валгринд и онда, чак и мада је мало опсирније,
Дасх Дасх цурења чек једнако пуна, а затим дот
сласх и име вашег програма.
Тако валгринд ће онда покренути свој програм и на самом крају свог програма
ради пре него што напусти и даје још један брз,
да ће анализирати ваше Програм док је водио
и рећи да сте цури свака меморије и још боље,
Да ли сте тоуцх меморију која није припадао вама?
То не може ухватити све, али је прилично добар у хватању већину ствари.
>> Дакле, ево примера из мог има рок Овај програм, који рун валгринд,
на програм под називом меморије, а ја идем
да укаже на линије које су на крају од интереса за нас.
Дакле, ту је још више одвлаче пажњу да сам избрисан из слајда.
Али, хајде да видимо шта је ово Програм је у стању да нам кажу.
То је у стању да нам говоре ствари као инвалид врите величине 4.
Другим речима, ако додирнете меморије, конкретно 4 бајта меморије
да не би требало да има, валгринд могу да вам кажем.
Погрешна писати величине 4.
Додирнуо си четири бајта да не би требало да има.
Где си то урадио?
То је лепота.
Меморија тачка ц линија 21 је место где вас зезнуо и зато је корисно.
Слично као ГДБ, може помоћи указати се на стварне грешке.
>> Дакле, ово је мало више опсирније, ако не и збуњујуће.
40 битес ин 1 блоковима су дефинитивно лост ин губитка Рецорд 1 оф 1.
Шта то значи?
Па, то само знаци да је тражио 40 бајта и никада га вратили.
Звао си маллоц или сте звали ГетСтринг и оперативни систем
Дао си 40 бајтова, али никад ослобођен или пуштен то сећање,
и да будем искрен, никада нисмо показали како да врати памћење.
Испоставило се да има супер једноставна функција названа бесплатно.
Има један аргумент, ствар желите да ослободите или вратити,
али 40 бајта, по свему судећи, У овом програму
су се изгубили на линији 20 меморије дот ц.
>> Па да видимо овај програм.
То је супер бескорисно.
То само показује ова грешка.
Дакле, хајде да погледамо.
Овде је главни и основни, најаве, позиви функција се зове ф и затим се враћа.
Дакле, није све то занимљиво.
Шта Ф радим?
Обратите пажњу нисам гњавити са прототип.
Желео сам да код најмањи могући.
Зато сам ставио ф изнад главни и то је у реду, свакако,
за кратке програме као што је овај.
Дакле, ф не врати ништа и ради не узимају ништа, али то не уради.
Она изјављује, слично У Бинки примеру,
показивач се зове х да иде да сачувате адресу инт.
Дакле, то је лева страна.
На енглеском, што је десна страна радиш?
Bilo ko?
Шта је то за нас?
Да?
>> ПУБЛИКА: [неразумљиво] пута већа од инт
што је 10 пута да [неразумљиво]
Давид Малан: Добар и да резимирам.
Тако издвојити довољно простора за 10 целих бројева или 10, што је величина инт,
то је четири бајта, па 10 пута 4 је 40, тако да десне стране да сам
Истакнута је да ми 40 бајтова и похранити адресу првог бајта
у к.
И сада на крају, и овде је где Овај програм је луд, шта је
није у реду са линије 21 по тој логици?
Шта није у реду са линије 21?
Да?
ПУБЛИКА: Не можете Индекс на к [неразумљиво].
Давид Малан: Да.
Не би требало индекс у таквим к.
Тако синтактички, то је у реду.
Шта је лепо је, баш као и ти може третирати име низа
као да је показивач, слично можете третирати показивач као да је
низ, па сам синтактички могу кажу х конзоле нешто к носач ја,
али је 10 је проблематичан.
Zašto?
>> ПУБЛИКА: Зато што није унутра.
>> Давид Малан: Није у тој меморију.
Шта је највећа вредност би требало да стављати у тим угластим заградама?
9, 0 до 9.
Због нула индексирање.
Дакле 0 до 9 ће бити у реду.
Брацкет 10 није добра и али, сећам се ипак, сваки пут
Чини ми се да покушавају да ЦС50 ИДЕ судара уношењем лажних вредности,
не увек сарађује, и заиста, често
посрећи само зато што је оперативни систем не
приметити да сте икада тако нешто прође мало комад меморије,
јер сте остали у технички Ваш сегменту, али више о томе
у оперативним системима класе, па овако нешто
могао врло лако да неопажено.
Ваш програм се никад неће срушити конзистентно, али можда једном у неко време.
>> И тако хајде да пробамо валгринд о томе, и овде је
где ћемо добити преплављени од излаза тренутно.
Тако да меморијски валгринд цурења чек једнако пуне тачка сласх меморију.
А ево зашто обећавам то би затрпати.
Ево шта валгринд, ево шта програмер, неколико година аго-
одлучила да би било добра идеја за излаз да изгледа.
Дакле, хајде да смисао овога.
Дакле, скроз на левој страни без доброг разлога
је процес ИД програма ми само трчимо, јединствени идентификатор
за програм смо управо побегао.
Избрисан смо да од слајд, али
је неке корисне информације овде.
>> Идемо дођите до самог врха.
Ево где смо почели.
Дакле, то није све толико излаз.
Ево да неважећи пишу величине 4 он лине 21.
Па, шта је линија 21?
Линија 21 је тачно ово и има смисла
да сам у пуноважност писање 4 бајта, јер сам
покушава да стави цео број, који би могао бити било шта,
само случајно нула, али се трудим
да га стави на локацији да не припада мени.
Штавише, овде доле, 40 бајтова у једном блокови су дефинитивно изгубљени у записнику 1.
То је зато што кад зовем маллоц овде, ја никада нисам ослободили меморију.
>> Дакле, како можемо поправити?
Пусти ме само напред и бити мало сигурније и до 9 тамо и пусти ме овде Фрее Кс.
Ово је нова функција за данас.
Ако сада поновљени се меморија дот сласх, хајде да валгринд раде на њему поново,
максимално прозор и притисните Ентер.
Сада, то је добро.
Они сахранити добре вести у свим овим излазом.
Све хеап блокови били слободни.
Вратићемо се на оно гомиле јесте, али нема цурења су могуће.
Дакле, ово је само још један алат за вашу комплет алата
са којима можете почети да нађем грешке такве.
>> Али, хајде да видимо шта више може да крене наопако овде.
Идемо прелаз сада заправо решавање проблема.
Као страну, ако ће ослободити мало конфузије или напетости,
ово је сада смешно.
Да.
То је прилично добро.
Зато што су показивачи адресе и адресе
углавном по конвенцији написан са хексадецималном.
Ха, ха, ово је смешно.
У сваком случају, је тако нека сада заправо решити проблем.
Ово је било супер, Супер ниског нивоа до сада,
а ми заправо радимо корисно да ствари са овим детаљима ниског нивоа.
>> Тако смо увели неколико недеља Пре појам низа.
Низ је лепо, јер тешко је почистимо наш код
јер ако смо желели написати Програм са више ученике
или више имена и куће и Домови за факултети и све то,
можемо похранити све више чисто унутар низа.
Али предлаже један мана оф низа до сада.
Чак и ако нисам је претрпео сами у програму, само инстинктивно,
шта је лоша ствар о низу, можда?
Чујем неке Мурмурс.
ПУБЛИКА: Тешко да промените величину.
Давид Малан: Тешко да промените величину.
Не можете променити величину неког низа, у ствари, пер се
у Ц. Можете издвојити још један низ, померите све од старог
у нови, а сада има неки додатни простор,
али не као Језик као Јава или Питхон
или било који број других Језици са којих су неки од вас
можда упознати где си могу само настави додајући ствари
оглас гадости до краја низа.
Када имате низ величина 6, да је његова величина,
и толико као идеја раније има бафер одређене величине,
морате да погодите из капије шта величина желиш да буде?
Ако погодите превелика, трошиш простор.
Ако погодите премала, хвала Не може да складишти податке да, барем
без много рада.
>> Тако данас, захваљујући показивачима, можемо старт ститцхинг заједно сопствени обичај
структуре података, ау Чињеница, овде је нешто
да изгледа мало више Цриптиц на први поглед,
али то је оно што ћемо назвати повезан листа, и његово име врста сумира
to.
То је списак бројева, или у овај случај, списак бројева,
али може бити листа ништа, али то је повезано заједно путем стрела,
и само да претпоставите са оним техника
ћемо моћи да споји,
нешто као кокице са навојем, то повезано наводи правоугаоника овде?
Њени бројева?
Шта је функција основни језик?
>> ПУБЛИКА: Показивач.
>> Давид Малан: Показивач.
Дакле, сваки од ових стрела овде представља показивач или само адреса.
Другим речима, ако желим да складиште листу бројева,
Не могу само да га чувате ако желим способност да расте и смањују
мој структуру података у низу.
Зато морам да имам мало више софистицираност,
али приметите да је ово Слика врста указује
да ако сте управо добили мало теме повезивање све заједно,
Вероватно није толико тешко направити простор између два од тих правоугаоника
или два од тих чворова, као што ћемо почети називајући их, ставио у новом чвору,
и онда са неким новим тхреад, само дитцх три чворова заједно,
први, последњи, а један који сте управо убаци у средину.
>> И заиста повезана листа, за разлику од низа, је динамичан.
То може да расте и да може психијатар и не
морате да знате или брига унапред колико много података ћеш бити складиштење,
али се испоставило да морамо да будемо мало опрезни о томе како да спроведе ово.
Дакле, прво размотримо како имплементирати један од ових малих правоугаоника.
То је лако да спроведе инт.
Само реци инт н, а затим добијате 4 бајта за инт,
али како могу да добијем инт, то назвати н а затим показивач, назовимо то следећи.
Ми зовемо ово могло ствари нешто желимо
али морам структуру обичај података.
Да?
>> ПУБЛИКА: Амперсанд [неразумљиво].
>> Давид Малан: Тако амперсендом ћемо искористити да добити адресу чвор потенцијално.
Али ми треба други карактеристика Ц како
да ми дају могућност креирања Овај обичај правоугаоник, овај обичај
променљива ако хоћете, у меморији.
ПУБЛИКА: струцт.
Давид Малан: струцт.
Подсетимо од прошле недеље, представили смо Струцт, ово релативно једноставно кључна реч
која омогућава нам да овакве ствари.
Ц није дошао са подацима Структура зове студент.
Она долази са инт и флоат и цхар и такав, али то не долази са студентом,
али можемо створити неку врсту ученик података, студент структура, са овим синтакси
овде.
И видећете ово опет и опет.
Дакле, не брините о напамет кључне речи,
али је кључна реч која је важна само чињеница да смо рекли, струцт
и онда смо га звали ученика и унутар студента је било име и кућа
или дорм или слично.
>> И сада је данас, хајде да предложи ово.
Додао сам неколико речи, али ако желим за примену овог правоугаоник који је
Имам оба инт анд а показивач, знаш шта, ја сам
да прогласи градитеља под називом чвор.
Ја сам такође, унутар ње, да кажем да чвор, ово правоугаоник, има инт
и ми ћемо га назвати н и има следећу показивач.
И ово је мало опширан, али ако мислите о томе,
стрелице које су биле на слици малочас су коју врсту података?
Где сваки од тих стрела указује шта тип података?
Није показује само на инт пер се.
То указује на Цела ствар правоугаони
и да правоугаони ствар, рекли смо, зове се чвор.
И тако смо некако морамо да рекурсивно дефинише ово што
да чвор, рећи ћемо, ће садржати инт под називом Н
и показивач се зове следећи и тип структуре подацима на које
да Показивач бодова је очигледно Биће струцт чвор.
>> Дакле, ово је досадно опширан и само да буде педантан,
разлог зашто не можемо само да кажем ово, што искрено
Изгледа много више читати, је зато што се сећате да је Ц прочитати
ствари од врха до дна, с лева на десно.
Није док не добијемо зарез да је чвор кључна реч заиста постоји.
Дакле, ако желимо да имамо ову врсту циклично референца унутар података
структура, морамо да урадимо ово, где је кажемо струцт цвор на врху, који
даје нам дужи начин описује ово ствар, онда унутар кажемо струцт ноде,
а онда у последњем реду кажемо, у реду, Ц, узгред,
Само позовите целу ову брига ствар чвор и зауставити
користећи градитеља кључних речи у потпуности.
Дакле, ово је само нека врста синтактичка трик који на крају нам омогућава да креирате
нешто што изгледа управо овако.
>> Дакле, ако сада можемо претпоставити имплементирати ову ствар у Ц,
Како радимо ствари старт прелажење ово?
Па, у ствари, све што треба да урадите је Посматрајте с лева на десно и само
врста убаците чворове или брисање чворова или тражити ствари где год желимо,
али да то урадите, идемо напред и да ствари јер мало реалније ово
до сада је било супер ниском нивоу.
Да ли би неко буквално бих да будем први?
ОК.
Хајде горе.
Како се зовеш?
>> Давид Давид.
Давид Малан Давид.
Драго ми је да смо се упознали.
И ја исто.
У реду.
И треба нам број 9.
Није добар као први, можда.
У реду, број 9.
Један број 17, молим вас.
Дозволите ми да се вратим мало даље.
Број 22, молим вас, и како би било даље назад
ако ја могу да видим никакве руке са свим лаког или бр.
Неко се добровољно тамо.
Да ли желите да дођу до?
Ваш подлактице се насилно иде горе.
У реду, 17.
22.
26 долази доле.
Да ли још неко желео да форцефулли-- Хајде горе.
Стварна волонтер.
>> Дакле, врло брзо, ако момци могу да организују
сами баш као чворови на екрану.
Хвала вам.
А ти ћеш бити 26.
У реду и брзе упознавање.
Дакле, ја сам Давид и ви такође?
Давид Давид.
Давид Малан: А ти си?
Јаке: Џејк.
Суе: Су.
Алекс: Алекс.
Рапхаел: Рафаел.
Таилор: Тејлор.
Давид Малан: Тејлор.
Одлично.
Дакле, то су наши волонтери за данас и само напред
и схифт мало на тај начин, и само напред и задржати
држи своје бројеве као што су или твој Први знак и коришћење леву руку,
само напред и само спроводе ове стрелице, само
тако да ваш лева рука је буквално указујући на све што треба да укаже
у, а себи дају мало простора, тако да можемо визуелно да видим руке заправо
показивање, а ви само да покажете врста на терену је добро.
>> Дакле, овде имамо повезану листу једног, два, три, четири, пет чворова у почетку,
и приметили смо ово специјално показивач на почетку ко је
Кључ јер морамо да пратимо целе дужине листе некако.
Ови момци, иако они напустили на десно, бацк то бацк у меморији,
они заиста могу бити било где у меморији рачунара.
Дакле, ови момци могу бити стоји било где на сцени
и то је у реду, докле год они заправо указује на једном другом,
али да би ствари чист и једноставан, ми ћемо
само их извући лево на десно као , али није могло бити масивне празнине
између тих чворова.
>> Сада, ако желим да заиста убаците неке нова вредност, идемо напред и урадите то.
Имамо прилику сада да изаберете неки други чвор.
Реци почнимо је са маллоцинг 55.
Да ли би неко смета ми да будем маллоц?
ОК, хајде горе.
Како се зовеш?
Раинбов Раинбов.
Давид Малан Раинбов?
У реду.
Маллоц Раинбов.
Хајде горе.
Тако да сада морамо да се запитамо алгоритмички где можемо ставити 55.
Дакле, сви ми знамо, Очигледно, где је вероватно
припада када покушавамо да ово остане поредани
и ако ви могли да једно корак назад тако да не паднете
фаза, то би било сјајно.
Уствари, Раинбов почети овде са мном,
јер смо као компјутер сада могу само видети једну променљиву у једном тренутку.
Дакле, ако је ово први чвор.
Обратите пажњу да није чвор, он је само показивач,
и зато га је привукло да буде Само величине показивача, не
један од тих пуних правоугаоника.
Дакле, идемо да проверимо на сваком итерација је 55 мање од 9?
Ne.
Да ли је 55 мање од 17?
Ne.
Мање од 22?
Мање од 26?
Мање од 34?
И сада, очигледно Раинбов припада на крају.
Дакле, да буде јасно, а шта је ваше име, Тејлор?
>> Таилор: Тејлор.
Давид Малан: Тако међу Таилор лева рука и Раинбов руке овде,
чија рука треба да укаже на оно што се у нареди да убаците 55 у овом списку?
Шта треба да урадимо?
Да?
>> ПУБЛИКА: Таилор рука треба да укаже лево.
>> Давид Малан: Управо тако.
Тако уметања чвор у крај листе
је прилично једноставна, јер само Тејлор има да укаже, уместо на терену
или ћемо га назвати нула, нула је нека врста одсуства
од показивачем или посебна нула показивач, ти си
да укаже са ваше леве стране руку на Раинбов и затим Раинбов,
где би свој леви рука вероватно указати?
Доле.
Није добро ако јој је рука је некако показиујете је овде или на неки начин било
на који начин.
То би се сматрати вредност смеће,
али ако она указује на нека позната вредност, ми ћемо
позовите га нула или нулл, то је у реду јер имамо термин у ово
а знамо да је листа сада је завршено.
>> Дакле, шта је друго релативно једноставно случај?
Можемо маллоц 5?
Хајде горе.
Како се зовеш?
ТИФФАНИ Тиффани.
Давид Малан: Жао ми је?
ТИФФАНИ Тиффани.
Давид Малан: Тифани.
У реду.
Тифани је маллоцед са вредношћу 5.
Хајде горе.
Ово је релативно лако превише, али размотримо редослед операција сада.
Било је прилично лако са Таилор на крају.
Број 5 је наравно мање од 9, па имамо Давида, имамо Тифани,
и како ти је име?
>> Јаке: Џејк.
>> Давид Малан: Џејк.
Тифани, Џејк, и Давид.
Чије руке прво треба да се ажурира?
Шта желите да урадите овде?
Постоји пар могући начини, али Такође постоји један или више погрешан начин.
>> ПУБЛИКА: Почните са левог.
>> Давид Малан: Почните са левог.
Ко је скроз лево овде?
ПУБЛИКА: Први.
>> Давид Малан: У реду.
Дакле, почните са првом и где и ти Желим да ажурира Давидове руке да буде?
ПУБЛИКА: Према 5.
Давид Малан: У реду.
Тако је Давид, тачка у пет или Тифани овде и сада?
>> ПУБЛИКА Тиффани указује на 9?
Давид Малан: Савршен, осим Бинки је шеф некако пао, зар не?
Јер, шта није у реду са ова слика буквално?
ПУБЛИКА: Ништа показује.
Давид Малан: Ништа није указујући на Јаке сада.
Буквално смо сирочад 9 и 17, и ми смо буквално сам
процурила све ове меморије, јер је ажурирање Давидову руку прво, то је
добро утолико што је исправно указујући ат Тиффани сада,
али ако нико имао предвиђање да укаже на Јаке,
онда смо изгубили целина тог списка.
Дакле, хајде да поништите.
Дакле, то је добра ствар саплете али да сада исправи.
Шта да радимо прво уместо тога?
Да?
>> ПУБЛИКА: Тифани треба да укаже на 9?
Давид Малан: Не могу Гет Тхат Цлосе то Иоу.
Ко би требало да укаже на 9?
>> ПУБЛИКА: Тифани.
>> Давид Малан: У реду.
Дакле, Тифани треба да прва тачка на 9.
Дакле, Тифани треба да на идентичан вредности
Давиду, што изгледа сувишан за тренутак,
али то је у реду, јер сада, друга корак, можемо ажурирати Давидову руку
да укаже ат Тиффани, а онда, ако Једноставно смо се чисте ствари уп
као да је то нека врста пролећа налик, сада када је исправно уметање.
Тако одличан.
Дакле, сада смо скоро тамо.
Хајде да убаците једну финале вредност као вредност 20.
Ако бисмо могли да маллоц једну коначну волонтера?
Хајде горе.
Дакле, ово је мало компликованије је.
Али заиста, код смо писање, иако вербално,
је као имати гомилу од уколико услови, зар не?
Имали смо стање проверу да ли припада
На крају, можда на почетку.
Требамо неку врсту петље до наћи место у средини.
Па хајде да то са оним што се зовеш?
>> Ерик Ериц.
>> Давид Малан: Ерик?
Ерик.
Драго ми је да смо се упознали.
Дакле, имамо 20.
Мање од пет?
Ne.
Мање од девет?
Ne.
Мање од 17?
Ne.
ОК.
Он припада овде и ваша имена су опет?
Суе: Су.
Давид Малан: Су.
Алекс: Алекс.
Давид Малан: Сју, Алекс, и?
Ерик Ериц.
Давид Малан Ериц.
Чијим рукама је потребно да се прво ажуриран?
>> ПУБЛИКА: Ерик.
ОК.
Дакле, Ерик треба да укаже на којој?
На 22.
Dobro.
А сад шта је следеће?
Сју онда може да укаже на Ериц и сада, ако вас само
направи мало места, што је добро визуелно, сада смо урадили уметање.
Дакле, хајде да сада размотрити питање, али хвала ти пуно за наше волонтере.
Врло добро урађено.
Можете задржати оне, ако желите.
И имамо диван поклон за растанак ако да би свако волео да се стрес лопту.
Само да прође ово доле.
Дакле, шта је понети ово?
Ово изгледа невероватно утолико што сада имамо
увела алтернативу низ који није толико ограничена
на низ неког одређену величину.
Они могу динамички расте.
>> Али, слично као што смо видели у недељама прошлост, никада нисмо добили ништа бесплатно,
као сигурно постоји компромис овде.
Дакле, са горњу то повезано листа, ово динамичност?
Ова способност да расте и искрено, Могли смо урадили брисање
и ми могли смањити ако је потребно.
Коју цену смо плаћају?
Дупло више простора, пре свега.
Ако погледате слику, више не Ја сам чување списак целих бројева.
Ја складиштење листу целих бројева плус показивачи.
Тако сам удвостручује количину простора.
Е сад, можда то и није тако велика ствар 4 бајта, 8 бајтова,
али је свакако могао додати се за велике скупове података.
Шта је још једна лоша страна?
Да?
>> ПУБЛИКА: Морамо да траверсе их једну по једну.
Давид Малан: Да.
Морамо да их прећи једну по једну.
Знаш шта, одустали смо ово супер погодна карактеристика квадратном конзоле
нотација, тачније познат као случајним приступом,
где можемо да скочи појединачном елемент
али сада ако и даље имао моје волонтери овде,
ако сам желео да пронађу број 22, не могу само
скочити на носач нечега.
Морам да погледам листу, много као нашим примерима Сеарцхинг линеарно,
да пронађе број 22.
Дакле, изгледа да смо тамо платили цену.
Али ми ипак можемо решавају друге проблеме.
>> У ствари, дозволите ми да представим само неколико визуелним ефектима.
Дакле, ако сте били до Матхер је трпезарија недавно,
ви се сећате да је њихова гомиле тацни као што је ова,
позајмили смо од њих Анненберг пре класе.
Дакле, ово гомила тацне, ипак, је представник заправо
од структуре података рачунарства.
Постоји структура података у компјутерској науци
познат као гомиле која веома лепо даје се тачно ово визуелно.
Дакле, ако сваки од ових носача каблова није траи али као број и хтео сам
да сачувате бројеве, могао ставити овде једну,
и ја могао ставити још овде, и настави слагање бројева
на врху једни на друге, и шта је потенцијално корисно о томе
је да оно што је импликација ове структуре података?
Који број могу да извучем Први најпогодније?
Највише је недавно један пут тамо.
>> Дакле, то је оно што бисмо ми назвали у информатика структура података ЛИФО.
Последња у, први аут.
А видећемо убрзо зашто да би било корисно, али за сада,
Само размислите имовину.
И то је некако глупо, ако мислите о томе како је трпезарија то ради.
Сваки пут су чисте и тацне ставите најсвежије оне на врху,
можете имати претходно чист али на крају врло прљава и прашњава
траи на самом дну Ако никада стварно
дођете до дна који стек, јер само теби
стално стављање нове и Чисте они на врху.
Иста ствар се може десити у супермаркету превише.
Ако имате витрине млека и сваки пут ЦВС
или ко добија више млека, само набити на млека
већ имате у леђа и сте ставили нове напред,
ти ћеш имати неке прилично гадан млеко на крају структуре података,
јер је увек на дну или еквивалентно је увек у позадини.
>> Али постоји и други начин размишљања о стају у податке и на пример, ово.
Ако сте један од оних људи који воли да се построје испред Аппле продавница
када је нови производ долази , ти си вероватно
не користи стек податке Структура јер вас
би отуђи сви остали који је стају у ред за куповину неке нову играчку.
Уместо тога, ти си вероватно користи каква структура података
или каква система у стварном свету?
Надам се да је линија, или више правилно или више британско-као, ред.
И испоставило се да је Ред је такође Структура података у компјутерској науци,
али ред има веома другачије имовине.
Није ЛИФО.
Последња у, први аут.
Боже сачувај.
Уместо тога је ФИФО.
Prvi ulazi - prvi izlazi.
И то је добра ствар за праведности 'ради
свакако кад постава до супер рано ујутро.
Ако стигнеш први, ти Желим да прво као добро.
>> И тако све ове податке структуре, редови и стацк
и гомиле других, испада вас могу да замислим ово као само низ.
Ово је низ, можда фиксна величина 4, али бих
бити лепо ако бисмо могли пиле тацне скоро бесконачно висок ако ми
имати толико лежишта или бројева.
Можда желимо да користити повезану листу овде,
али компромис ће бити потенцијално да нам је потребно више меморије,
Потребно је мало више времена, али смо не ограничавају висину стека,
налик витрине Матхер је може ограничити величину стека,
па то су одлуке дизајн или опције за нас коначно.
Дакле, са овим подацима структуре, почели смо
види нове горње границе потенцијално на оно што је раније било супер брз
и где ћемо оставити Офф данас и где
надамо се доћи до је у среду, ми ћемо
почнете да погледате податке структура која нам омогућава да претражите
кроз података у дневнику крај времена опет.
И видели смо да, сећам се, у недељу нула и један са бинарном претреса или поделе
па владај.
То се враћа и боље, свети грал за ову среду
ће бити да дођу до са структура података која ради заиста
или теоретски у константа време, при чему
није битно колико милиони или милијарде ствари
имамо у структури података, то ће Води нас константно време, можда један корак
или два корака или 10 корака, али сталне број корака
за претраживање кроз ту структуру података.
То заиста ће бити свети грал али више о томе у среду.
Видимо се онда.
>> [Мусиц плаиинг]