[Powered by Google Translate] [Члан 6] [Пријатнији]
[Роб Бовден] [Универзитет Харвард]
[Ово је ЦС50.] [ЦС50.ТВ]
>> Можемо кренути на нашој секцији питања.
Сам послао УРЛ за простор пре.
Почетак дела питања рећи:
очигледно нисам у потпуности унсицк-је веома лако питање
да само што се Валгринд?
Шта валгринд ради?
Свако жели да каже шта валгринд ради?
[Студентски] Проверава цури меморија.
Да, валгринд је општи меморије правописа.
То, на крају, каже вам ако имате меморије цурења,
која је углавном оно што ми га користе за, јер ако желиш да
раде добро у проблему сету или ако желите да
добити на великом броду, потребно је да уопште нема цурења меморије,
а у случају да имате меморијску цурење које не можете да нађете,
Такође имајте на уму да увек када отворите датотеку
а ако га не затворите, то је осипање меморије.
>> Многи људи су у потрази за неке чвор да не ослобађа
када стварно нису затворили речник у првом кораку.
Она такође говори ако имате било неважеће чита или пише,
што значи да ако покушате да подесите вредност
то је ван краја гомиле и не деси сегменту грешке
али валгринд га ухвати, као што не би заправо требало да буде тамо пише,
па дефинитивно не би требало да има било који од оних било.
Како се користи Валгринд?
>> То је опште питање
некако га покрените и погледајте на излазу.
Излаз је оптеретимо много пута.
Ту је и забава грешке где ако имате неке страшно погрешно
дешава у петљи, онда ће се на крају рећи, "Пут превише грешака.
Ја ћу зауставити бројање сада. "
То је у основи текстуални излаз који треба да анализирамо.
На крају, он ће вам рећи било какво цурење меморије које имате,
колико блокова, што може бити корисно, јер
ако је један блок унфреед, онда је обично лакше да нађу
од 1.000 блокова унфреед.
1.000 блокова унфреед вероватно значи да не ослобађа
Ваши повезане листе адекватно или нешто.
То је Валгринд.
>> Сада имамо део питања,
које не треба да преузмете.
Можете да кликнете на моје име и повуците их у простору.
Сада кликните на мени.
Ревизија 1 ће бити скуп, који смо први пут радили.
Ревизија 2 ће бити перчин, и ревизија 3 ће бити појединачно повезана листа.
Полазак са нашим стек.
Као што овде пише, стек је један од најосновнијих,
основне структуре података у рачунарству.
Веома прототип пример је
стек од носача у трпезарији.
То је у суштини увек када се упознао са стека,
неко ће рећи, "Ох, као гомилу касета."
Ви стек лежишта горе.
Онда када одете да се повуче послужавник,
Први касета која је добијање извукао је последњи који је стављен на стек.
Стек је такође попут каже овде-
имамо сегмент меморије назива стек.
А зашто се зове стек?
>> Јер као структура стек података,
она гура и искочи стек оквире на стек,
где стек оквири су као специфичном позиву функције.
И као димњак, увек ћете морати да се врате
од позива функције пре него што можете да добијете доле у ​​нижим стека оквире поново.
Не можете имати главну позива фоо позива Бар и Бар повратак у главни директно.
То је увек мора да прати правилан стек гура и кокичавости.
Две операције, као што сам рекао, су притисак и поп.
То су универзалне термини.
Требало би да знате пусх и поп у смислу димњацима без обзира на све.
Видећемо редови су некако другачије.
То није заиста имају универзални термин, али притисак и поп су универзални за димњацима.
Пусх се само стави на стек.
Поп је скинути штос.
А ми овде имамо типедеф струцт штос
тако да имамо карактер ** жице.
Немој да плаши било **.
Ово ће завршити као низ стрингова
или низ показивача на знакова, где
показивачи на ликова имају тенденцију да буду ниске.
То не мора да буде жице, али овде, они ће бити ниске.
>> Имамо низ стрингова.
Имамо величину, која представља колико елементи су тренутно на стек,
и онда имамо капацитет, који је колико елементи могу бити на стеку.
Капацитет треба кренути као нешто веће од 1,
али величина ће кренути као 0.
Сада, у основи постоје три различита начина на које могу да се сетим гомиле.
Па, вероватно има више, али два главна начина су
можете га спроведе помоћу низа, или можете га спроведе помоћу повезане листе.
Повезане листе су врста тривијалне да штекова из.
Веома је лако направити гомилу користећи повезане листе,
па ево, ми ћемо направити гомилу помоћу низова,
а затим помоћу низова, такође постоје два начина на које можете размислити о томе.
Раније, кад сам рекао да имамо капацитет за стек,
тако да може да стане један елемент на стек.
>> Један начин на који то може да се деси јесте чим сте погодили 10 елемената, онда сте урадили.
Ви можда знате да постоји горња граница од 10 ствари на свету
да никада неће имати више од 10 ствари на стек,
у ком случају можете имати горњу границу од величине вашег стека.
Или сте могли да твој стацк бити неограничен,
али ако радите низ, што значи да сваки пут када ударио 10 елемената,
онда ћеш морати да порасте на 20 елемената, а када кликнете 20 елемената,
ћеш морати да развију своје низ од 30 елемената или 40 елемената.
Ти ћеш морати да повећа капацитет, што је оно што ћемо да урадимо овде.
Сваки пут када достигну максималну величину наше стек,
кад гурамо нешто друго, ми ћемо морати да се повећа капацитет.
Ево, ми смо притисак проглашен Боол притиском (цхар * стр).
Цхар * стр је стринг који смо гурају на стек,
и воид само каже да ли смо успели или није.
>> Како да не успемо?
Шта је једини околност да можете мислити
где бисмо треба да се врате лаж?
Да.
[Студентски] Ако је пуна и ми смо помоћу повезати имплементацију.
Да, па како ћемо дефинисати, он је одговорио
ако је пуна и ми смо помоћу ограничено спровођење.
Онда смо дефинитивно вратити лажна.
Чим смо погодили 10 ствари у низу, не можемо стати 11, па смо се вратили лажна.
Шта ако је неспутана? Да.
Ако не можете да проширите палету из неког разлога.
Да, тако је меморија ограничен ресурс,
и на крају, ако се држимо ствари гурају на стацк изнова и изнова,
ћемо покушати да издвоје већи спектар да се уклопи
већи капацитет, а маллоц или шта год ми користимо ће вратити фалсе.
Па, маллоц ће се вратити нулл.
>> Запамтите, сваки пут сте се икада звати маллоц, требало би да провере да ли је то
враћа нулл иначе да је исправност одбитак.
Пошто желимо да имамо неограничену штос
једини случај да ћемо се вратити фалсе је ако покушамо да
повећати капацитет и маллоц или шта год даје лажна.
Онда поп нема аргумената,
и враћа ниску која се налази на врху стека.
Шта год да је недавно гурнуо на стек је оно поп враћа,
и такође га уклања са стека.
И приметите да се враћа нулл ако не постоји ништа на стек.
Увек је могуће да је стек празан.
У Јави, ако сте навикли на то, или другим језицима,
покушавајући да искочи из празног стека може изазвати изузетак или тако нешто.
>> Али у Ц, нулл је врста много случајева како руковати ове проблеме.
Враћајући ништавним је како ћемо да значи да стек је празан.
Смо навели код који ће тестирати функционалност вашег стацк-а,
имплементирати пусх и поп.
То неће бити много кода.
Хоћу-заправо, пре него што то урадимо, наговештај, наговештај-
ако нисте видели, маллоц није једина функција
да алоцира меморију на гомили за тебе.
Постоји породица аллоц функција.
Први је маллоц, који сте ви навикли.
Затим, ту је цаллоц, који ради исту ствар као и маллоц,
али ће све нула за вас.
Ако сте икада желели да поставите све да нулл после маллоцинг нешто
Требало је само користили цаллоц на првом месту, уместо писања
за петље до нуле из цео блок меморије.
>> Реаллоц је као маллоц и има доста посебним случајевима,
али у суштини оно што ради је реаллоц
потребно је показивач који је већ додељен.
Реаллоц је функција коју желите да обраћају пажњу на овде.
Потребно је показивач који је већ вратио из маллоц.
Рецимо да затражи од маллоц показивач од 10 бајта.
Касније сте схватили сте желели 20 бајта,
па ви називате реаллоц тог показивача са 20 бајта,
и реаллоц ће аутоматски копирају у свему за вас.
Ако само поново позвао маллоц, као да имам блок од 10 бајта.
Сада треба блок од 20 бајта,
па ако маллоц 20 бајтова, онда морам да ручно копирате преко 10 бајта из прве ствар
у другој ствари, а онда бесплатно прва ствар.
Реаллоц ће се побринути за тебе.
>> Обавештење потпис ће бити неважећи *
који је само враћа показивач на блоку меморије,
онда воид * птр.
Мозете мислити о воид * као генерички показивач.
Генерално, никад се баве воид *,
али маллоц се враћају воид *, а онда се користе само као
То је заправо ће бити знак *.
Претходни воид * који је вратио маллоц
сада ће бити донет до реаллоц, а затим величине
је нови број бајтова желите да издвоји, тако да ваш нови капацитети.
Даћу вам пар минута, и да је у нашем простору.
Почните са ревизији 1.
Ја ћу вас заустави после отприлике надам довољно времена да спроведе воки,
и онда ћу ти дати једну паузу да радим поп.
Али то заиста није толико код уопште.
Највећи број је вероватно шири ствари, проширење капацитета.
Ок, нема притисак да се у потпуности ради,
али докле год се осећате као да сте на правом путу, то је добро.
>> Да ли неко има било код оне осећају пријатно са мном вуче горе?
Да, хоћу, али не неко има било код могу повући горе?
Ок, можете да почнете, сачувајте га, шта год да је?
Увек заборавим тај корак.
Ок, гледајући притиском,
Не желите да објасните свој код?
[Студентски] Пре свега, ја сам повећао величину.
Претпостављам можда сам требао да-ионако сам повећао величину,
и ја видим да је то мање од капацитета.
И ако је мањи од капацитета, додам да низ који смо већ имамо.
А ако није, ја помножите капацитета са 2,
и ја преусмјерити ниске низ у нешто са већом капацитета величине сада.
И онда, ако то не успе, ја кажем корисника и вратили лажна,
и ако је то у реду, онда сам ставио жицу у новом месту.
>> [Роб Б.] приметити и то да се овде користи лепу над битовима оператера
да помножити 2.
Запамтите, лева смена увек ће бити помножена 2.
Право промена је подељен са 2 док се сећате да то значи
поделите са 2 као цео број подељен са 2.
То може скратити на 1 овде или тамо.
Али промена је оставио 1 је увек ће бити помножена са 2,
осим ако прекорачење границе на цео број, а онда неће бити.
Страна коментар.
Волим да радим, ово неће променити кодирање никакав начин,
али ја волим да радим нешто овако.
То је заправо ће учинити нешто дуже.
Можда ово није савршен случај да се покаже ово,
али ја бих да га сегмент у овим блоковима,
ок, ако је ово ако се деси, онда ћу да урадим нешто,
и онда је функција ради.
Не треба онда да помицати очи скроз доле у ​​функцији
да види шта се дешава после другог.
То је ако ово ако се деси, онда ћу само вратити.
Она такође има лепу додатну корист од свега мимо ове
сада померена једном отишао.
Ја више не треба, ако сте икада у близини смешно дуге линије,
онда та 4 бајта може да помогне, али и више лево нешто,
мање осећате преплављени, ако желите, у реду, морам да се сетим
Ја тренутно сам у вхиле петље унутар једног другог унутрасњости за петљу.
Било где можете да урадите одмах да овај повратак, некако изгледа.
То је потпуно необавезно и не очекује се ни на који начин.
>> [Студентски] Ако буде величине - у Фаил стању?
Фаил услов овде нисмо успели да реаллоц, тако да.
Запазите како је у стању успети, вероватно,
уколико касније смо бесплатне ствари, увек идемо на пропаст
без обзира колико пута ћемо покушати да гура нешто.
Ако наставимо да гура, чувамо увецава величину,
иако ми не стављате ништа на стеку.
Обично ми не повећавати величину све док
након успешно смо га ставили на гомилу.
Ми бисмо то урадили, кажу, било овде и овде.
И онда, уместо да с.сизе ≤ капацитет, то је мање од капацитета,
само зато што смо се преселили у коме је све био.
>> И запамтите, једино место које смо можда могли вратити фалсе
је овде, где реаллоц враћа нулл,
а ако се деси да се сетите стандардну грешку,
можда можете размислити овај случај где желите да одштампате стандардну грешку,
па иф стдерр, уместо да само штампање директно на стандардну напоље.
Опет, то није очекивање, али ако је то грешка,
упишите принтф, онда ћете можда желети да га штампате на стандардном грешком уместо стандардног излаза.
>> Свако има нешто да примети? Да.
[Студентски] Да ли ићи преко [нечујан]?
[Роб Б.] Да, стварна бинаринесс тога или шта је то?
[Студентски] Па то помножити са 2?
[Роб Б.] Да, у суштини.
У бинарном земљи, увек имамо низ цифара.
Прелазак овај лево од 1 суштини умеће овде на десној страни.
Назад на ово, само сећајући се да је све у бинарном
је снага 2, тако да ово представља 2 до 0,
ово 2 на 1, овај 2 на 2.
Убацивањем сада 0 на десну страну, само пребаци све готово.
Оно се користи да буде 2 до 0 је сада 2 на 1, 2 је у 2.
Са десне стране да убаци
нужно ће бити 0,
што има смисла.
Ако сте икада помножите број са 2, то неће завршити чудно,
па 2 до 0 мјесту треба да буде 0,
и то је оно што сам пола упозоравао пре него што је, ако се не деси да се помери
иза броја битова у цео број,
онда 1 ће се завршити одлутају.
То је једина брига ако вам се деси да се бави заиста великих капацитета.
Али, у том тренутку, онда имате посла са низом милијардама ствари,
који не може да стане у меморију свеједно.
>> Сада можемо доћи до попа, који је још лакше.
Могли не свиђа, ако вам се деси да се појави на гомилу,
а сада сте на пола капацитета поново.
Могли реаллоц да смањи количину меморије коју имате,
али не морате да бринете о томе, тако да је једини реаллоц случај ће бити
расте меморије, никада смањује меморију,
који ће да направи поп супер лако.
Сада редови, које ће бити као баласта,
али нареди да узмете ствари је обрнуто.
Прототип пример ред је ред,
па ваљда да си енглеском, ја бих рекао
прототип пример ред је ред чекања.
Дакле, као линији, ако си прва особа у реду,
Ви очекујете да буде прва особа из линије.
Ако сте последња особа у реду, ви ћете бити последња особа на сервис.
Ми то зовемо ФИФО образац, а стек је ЛИФО образац.
Ове речи су прилично универзална.
>> Као и за разлику од гомиле низовима, редови обично не дозвољава приступ елементима у средини.
Ево, стек, имамо пусх и поп.
Ево, ми се деси да су их звали енкуеуе и декуеуе.
Такође сам чуо да их називају смену и унсхифт.
Чуо сам људи кажу притисак и поп да се примењују и на редовима.
Чуо сам убацити, уклоните
па пусх и поп, ако говоримо о димњацима, ти гурају и кокичара.
Ако говорите о редовима, могли одабрати речи које желите да користите
за убацивање и уклањање, а не постоји консензус о томе шта би требало да се зове.
Али, овде имамо енкуеуе и декуеуе.
Сада, струцт изгледа готово идентично стек струцт.
Али морамо да пратите главе.
Ваљда се каже овде, али зашто нам је потребна главу?
Прототипови су у суштини идентични пусх и поп.
Можете мислити о томе као пусх и поп.
Једина разлика је поп враћа-уместо последњег, она се враћа први.
2, 1, 3, 4, или тако нешто.
И овде је почетак.
Наш перчин је потпуно пуна, тако да четири елемента у њој.
Крај нашег реда је тренутно 2,
и сада идемо да убаците нешто друго.
>> Када желимо да убаците ту нешто друго, оно што смо урадили за стек верзију
се проширили смо нашу блок меморије.
Шта је проблем са овим?
[Студентски] Можете померати 2.
Оно што сам рекао пре о крају реда,
ово нема смисла да почињемо од 1,
онда ми желимо да декуеуе 1, онда декуеуе 3, затим декуеуе 4,
онда декуеуе 2, а затим декуеуе ово.
Ми не можемо да користимо реаллоц сада,
или у најмању руку, треба да користите реаллоц на другачији начин.
Али ти вероватно не би требало да користе само реаллоц.
Ви ћете морати да ручно копирате памћење.
>> Постоје две функције да копирате меморије.
Ту је и мемцопи меммове.
Ја тренутно читате ман странице да бисте видели који ћете желети да користите.
Ок, мемцопи, разлика је
да мемцопи и меммове, један рукује правилно случај
где сте копирање у региону која се дешава да се преклапају регион
ти копирања.
Мемцопи то не средим. Меммове ради.
Можете да мислите о проблему као-
Рецимо желим да копирате овог момка,
ова четири до овог момка више.
На крају, шта се низ требало да изгледа
након копија је 2, 1, 2, 1, 3, 4, и онда неке ствари на крају.
Али то зависи од редоследа у коме ми у ствари копије,
јер ако ми не сматрамо чињеницу да је регион смо копирање у
преклапа један смо од копирања,
онда бисмо могли учинити као почетак овде, копирајте 2 у месту желимо да идемо,
онда крене напред наше савете.
>> Сада ћемо бити овде и овде, а сада желимо да копирате
овај момак у овом момку и крене напред наше савете.
Шта ћемо завршити све је 2, 1, 2, 1, 2, 1
уместо одговарајућег 2, 1, 2, 1, 3, 4 јер
2, 1 поништио првобитну 3, 4.
Меммове ручке то добро.
У овом случају, у основи само увек користите меммове
јер га рукује исправно.
То генерално не изврши било горе.
Идеја је, уместо почевши од почетка и копирање на овај начин
као што смо управо урадили овде, она почиње од краја и копира у,
и у том случају, никада не можете имати проблема.
Не постоји представа изгубљено.
Увек користите меммове. Никада брините мемцопи.
И то је место где ћете морати да одвојено меммове
тхе умотан-около део вашег ред.
Без бриге, ако не и потпуно учињено.
То је теже него стек, гурати и попа.
>> Свако имате код можемо радити са?
Чак и ако у потпуности непотпун?
[Студентски] Да, то је потпуно непотпун, ипак.
Потпуно је у реду непотпуно докле год можемо, можете сачувати ревизију?
Заборавио сам да је сваки пут.
Ок, игноришући шта се дешава када треба да промените величину ствари.
Потпуно игноришу промените величину.
Објасните ову шифру.
Ја сам проверу пре свега, ако је мања него копију пре свега
и после тога сам убацити-узимам главу + величину,
и да се уверим да је то обавија око капацитета низа,
и ја убаците нову жицу на том положају.
Онда сам повећати величину и врати истина.
>> [Роб Б.] Ово је дефинитивно један од оних случајева где идете да желе да користе мод.
Било која врста предмета где сте око паковање, ако мислите около паковање,
непосредна мисао би требало да буде мод.
Као брз оптимизације / направи ваш код једна линија краћи,
приметите да линија одмах после ово
је само величина + +, тако да споји то у овој линији, величина + +.
Сада овде имамо случај
где немамо довољно меморије,
па ми смо све наше капацитете 2.
Претпостављам да бих овде имају исти проблем, али можемо да га игноришемо сада,
где ако ниси успео да повећа свој капацитет,
онда ћеш желети да смањи свој капацитет за 2 поново.
Други кратка напомена је исто као што можете да урадите + =,
можете да урадите << =.
Скоро све може ићи пред једнако, + =, | = & = << =.
Цхар * нови је наш нови блок меморије.
О, овамо.
>> Шта људи мисле о врсти нашег новог блока меморије?
[Студентски] То би требало да буде цхар **.
Мислећи вратимо на струцт овде,
Жице је оно што ми се премјештањем.
Правимо читаву нову динамичну акумулацију елемената у реду.
Оно што ћемо бити доделити својим жицама је оно што смо ми маллоцинг сада,
па нова ће бити са цхар **.
То ће бити низ стрингова.
Онда шта је случај под којима ћемо се вратити лаж?
[Студентски] Да будемо радимо цхар *?
[Роб Б.] Да, добро позив.
[Студентски] Шта је то?
[Роб Б.] Ми смо желели да урадимо величину цхар * јер ми више не-
то би заправо бити веома велики проблем јер сизеоф (инт) ће бити 1.
Сизеоф цхар ће бити 4,
тако много времена када сте се баве Интс,
Ви имају тенденцију да побегне са њом јер величина инт и величине инт *
на 32-битном систему ће бити иста ствар.
Али овде, сизеоф (цхар) и сизеоф (цхар *) су сада ће бити иста ствар.
>> Шта је околност где смо се вратили лаж?
[Студентски] Нови је нулл.
Да, ако је нова нулл, враћамо лажна,
и ја ћу да бацим доле-
[Студентски] [нечујан]
[Роб Б.] Да, то је у реду.
Или може да уради 2 пута капацитет или капацитета пребаци 1 и онда га само поставио овде, или било шта друго.
Ми ћемо то урадити што смо га имали.
Капацитет >> = 1.
И ви никада нећете морати да бринете о губитку у 1 своје место
јер сте оставили померен за 1, тако да је 1 је место нужно 0,
па зар пребацивање са 1, још увек ће бити у реду.
[Студентски] Да ли треба да урадим пре повратка?
[Роб Б.] Да, то чини апсолутно нема смисла.
>> Сада претпоставимо да ћемо завршити враћају тачно до краја.
Начин ћемо да урадимо ове меммовес,
морамо да будемо опрезни са колико их ради.
Да ли неко има било какве сугестије о томе како ћемо их урадити?
Ево наш почетак.
Неизбежно, желимо да почнемо од почетка поново
и фотокопир ствари у одатле, 1, 3, 4, 2.
Како сте то урадили?
Прво, морам да погледам у ман страници за меммове поново.
Меммове, редослед аргумената је увек важно.
Желимо прво наше одредиште, извор друго, величина трећи.
Постоји много функција које преокренути извор и одредиште.
Дестинација, извор тежи да буде доследна донекле.
Покрет, шта је то враћа?
Она враћа показивач на одредиште, из било ког разлога можда ћете желети то.
Могу слику да прочитам, али желимо да пређемо на наше одредиште.
>> Шта је наша дестинација ће бити?
[Студентски] Нови.
[Роб Б.] Да, и где смо копирања?
Прва ствар коју смо копирање је ово 1, 3, 4.
Шта је ово-1, 3, 4.
Која је адреса овог 1?
Која је адреса тог 1?
[Студентски] [нечујан]
[Роб Б.] Шеф + адреса првог елемента.
Како смо добили први елемент у низу?
[Студентски] Ред.
[Роб Б.] Да, к.стрингс.
Запамтите, овде, наша глава је 1.
Дарн ит. Ја само мислим да је то магично
Ево, наш глава 1. Идем да превише мењам боју.
И овде је жице.
Ово, можемо или да га напишем као што смо урадили овде
са главама + к.стрингс.
Много људи га такође пише и к.стрингс [шеф].
Ово није баш ништа мање ефикасна.
Можда мислите о томе као да су га дереференцинг а затим добијање адресу,
али компајлер ће га превести на оно што смо имали раније ионако к.стрингс + глава.
Или начин на који желите да мислите о томе.
>> А колико бајтова желимо да чујеш?
[Студентски] Капацитет - глава.
Капацитет - глава.
И онда увек можете написати пример
да схватим да ли је то у реду.
[Студентски] То мора да буде подељено са 2 онда.
Да, па претпостављам да би ми величину.
Ми још увек имамо величину бити-
користи величину, морамо величину једнаку 4.
Наша величина је 4. Наша глава 1.
Желимо да копирате ова 3 елемента.
То је разум проверите да величину - глава је исправно 3.
И долазе овамо, као што смо рекли раније,
ако ми заузете, онда бисмо морали да поделите са 2
јер смо већ одрасли наше капацитете, па уместо тога, ми ћемо користити величину.
То копије које порција.
Сада морамо да копирамо друге део, део који је остало од почетка.
>> То ће меммове у оно положај?
[Студентски] плус сизе - глава.
Да, тако да смо већ копирали у величини - главе бајтова,
па где желимо да копирамо преостале бајтове је нова
и онда величина минус-добро, број бајтова које смо већ копира за
А где смо копирања?
[Студентски] К.стрингс [0].
[Роб Б.] Да, к.стрингс.
Ми или да урадите и к.стрингс [0].
Ово је знатно ређе од овога.
Ако је само то ће бити 0, онда ћете да видим к.стрингс.
То је место где смо копирања.
Колико бајтова ми је остало да чујеш? >> [Студентски] 10.
Тачно.
[Студентски] Да ли морамо да се размножавају 5 - 10 пута већи од бајта или тако нешто?
Да, па ово је место где-шта смо копирањем?
[Студентски] [нечујан]
Која је врста ствари смо копирања?
[Студентски] [нечујан]
Да, тако цхар * с да смо копирање, ми не знамо где се оне долазе.
Па, где они указују да, као жица, завршимо гурајући га на ред
или енкуеуинг на ред.
Одакле они долазе из, немамо појма.
Ми само треба да пратите на цхар * с самих.
Ми не желимо да копирате величину - Шеф бајтова.
Желимо да копирате величину - Шеф цхар * с,
па ћемо да помножите ово сизеоф (цхар *).
Исто овде доле, глава * сизеоф (цхар *).
>> [Студентски] Шта [нечујан]?
Ово овде?
[Студентски] Не, испод тога, величина - глава.
[Роб Б.] Ово овде?
Показивач аритметика.
Како показивач аритметика ће радити јесте
то аутоматски множи са величином типа да смо се баве.
Баш као овде, нови + (величина - глава)
управо одговара и нови [величини - главе]
док очекујемо да исправно раде,
јер ако имамо посла са инт низ, онда не индекс од инт-
или ако је то од величине 5 и желите 4. елемент, онда индекс у
инт низ [4].
Ви немојте-[4] * величина инт.
То ручке аутоматски, и овај случај
је буквално еквивалент, па носач синтакса
је само ће бити конвертован у ово чим компајлирати.
То је нешто што треба да пазите да
када додајете величину - глава
додајете не један бајт.
Ти додајући један цхар *, што може бити један бајтова или шта год.
>> Остала питања?
Ок, декуеуе ће бити лакше.
Даћу вам један минут да спроведе.
Ох, и мислим да је ово иста ситуација у којој
шта енкуеуе случај, ако смо енкуеуинг нулл,
можда желимо да се рукује, можда не.
Нећемо то урадити поново овде, али исто као и наш стек случају.
Ако смо енкуеуе ништавним, можда ћемо желети да га занемарите.
Свако има неку шифру могу повући горе?
[Студентски] Морам декуеуе.
Верзија 2 је да-ок.
Хоћеш да објасним?
[Студентски] Прво, проверите да ли постоји нешто у реду
и да величина иде доле за 1.
Ви треба да урадите то, а онда вратите главу
и онда померите главу 1.
Ок, тако да је угао случај да морамо да размотримо. Да.
[Студентски] Ако је ваша глава је у последњем елементу,
онда не желимо да истакнемо глава изван низа.
>> Да, па чим главу удари крај нашег низу,
када смо декуеуе, наша глава треба да буде моддед назад на 0.
Нажалост, не можемо то урадити у једном кораку.
Претпостављам како сам вероватно бих се поправи
ово ће бити цхар, оно што се враћамо,
год ваше име променљиве жели да буде.
Онда смо да модифитсиране главу наше способности
и онда се врати д.
Много људи овде би могли да до-
ово је случај-Видећеш људе учинити ако глава
је већи од капацитета, до главе - капацитет.
И то је управо оно што ради око мод је.
Шеф мод = капацитет је много чистији
од око омоту него ако глава већа од капацитета главе - капацитета.
>> Питања?
Ок, последња ствар коју смо оставили наша повезана листа.
Можда ћете бити коришћен за неке повезане листе понашања ако јеси
повезана листа у вашим хасх табеле, ако је урадио хеш табелу.
Препоручујем радиш хеш табелу.
Можда сте већ урадили трие,
већ покушава теже.
У теорији, они су асимптотски боље.
Али само погледајте на великој табли,
и покушава никад боље, а они заузимају више меморије.
Све о покушава завршава се горе за више посла.
То је оно Дејвида Малан решење је увек
је он увек порука његову трие решење, па да видимо где је тренутно.
Шта је он био под Давид Ј?
Он је # 18, тако да није страшно лоше,
и то ће бити један од најбољих покушава можете мислити
или један од најбољих покушава од трие.
Да ли је то чак и није његов оригинални решење?
Осећам се као да трие решења имају тенденцију да буду више у овом опсегу РАМ употребе.
>> Идите доле до самог врха, и РАМ употреба је у једноцифрен.
Идите доле према дну, а онда да видите покушава
где сте добили апсолутно масиван потрошњу РАМ
и покушава теже.
Не у потпуности, али вредело образовног искуства ако си један.
Последња ствар је наша повезана листа,
и ове три ствари, стек редова, а повезане листе,
свака будућа ствар коју си икада урадити за компјутерске науке
ће претпоставити да имате упознати са овим стварима.
Они су само толико фундаментална за све.
>> Повезан листе, а овде смо појединачно повезана листа ће бити наш имплементација.
Шта појединачно повезана значи насупрот двоструко повезани? Да.
[Студентски] То само указује на следећу показивача него на показивача,
попут оног који претходи га и онај после њега.
Да, па на слици формату, шта сам урадио?
Имам две ствари. Имам слику и слику.
На слици формату, наши појединачно повезане листе,
неизбежно, имамо неку врсту показивача на челу наше листе,
а онда у нашем листу, имамо само показиваче,
и мозда то указује на нулл.
То ће бити ваш типичан цртеж појединачно повезане листе.
Двоструко повезане листе, можете ићи уназад.
Ако ти дам било какав чвор у листи, онда нужно да дођете до
било који други чвор у листи ако је двоструко повезана листа.
Али, ако сам ти трећи чвор у листи и то је појединачно повезана листа,
нема шансе да ћеш икада доћи до прве и друге чворове.
А ту је и користи и штете, и један очигледан један
је ли заузимају више величина, а ви морате да пратите где се ове ствари су сада показујем.
Али ми смо само стало појединачно повезана.
>> Неколико ствари које ћемо морати да спроведе.
Ваша типедеф струцт ноде, инт: струцт ноде * следећа; чвор.
То типедеф треба спалити у вашим главама.
Квиз 1 треба дати бих типедеф од повезаног листе чвор,
и требало би да буду у стању да одмах Сцриббле то доле
чак и без размишљања о томе.
Претпостављам пар питања, зашто морамо струцт овде?
Зашто не можемо рећи чвор *?
[Студентски] [нечујан]
Да.
Једина ствар која дефинише чвор као ствар
је сама типедеф.
Али, од ове тачке, када смо некако анализи кроз ове дефиниције струцт ноде,
нисмо завршили још наш типедеф, па пошто типедеф није завршио,
чвор не постоји.
Али струцт чвор има, и то чвор овде,
ово би могло да се зове нешто друго.
То би се могло назвати н.
Може се зове повезана листа чвор.
Може се зове ништа.
Али ово струцт чвор треба да се зове исто као и овај струцт ноде.
Оно што ви зовете то мора бити овде,
и тако да се одговори на другу тачку на питање
због чега је, много пута када видите Структуре и типедефс од Структуре,
видећете анонимне Структуре где ћете само видети типедеф струцт,
имплементација струцт, речника, или било шта друго.
>> Зашто овде не морамо да кажемо чвор?
Зашто не може да буде анонимна струцт?
Скоро је исти одговор.
[Студентски] Морате да се односи на њега у струцт.
Да, у оквиру струцт, морате да се односи на саму струцт.
Ако не дати струцт име, ако је анонимни струцт, не може односити на њега.
И последње, али не најмање њих треба да буду помало једноставно,
и они би требало да вам помогну да схватите ако пишете ово доле
да радите нешто погрешно ако се ови свашта немају смисла.
Последње, али не и најмање важно, зашто то мора да буде струцт ноде *?
Зашто не може бити само струцт ноде следеће?
[Студент] показивач на следећу струцт.
То је неизбежно шта желимо.
Зашто би то никад бити струцт ноде следећи?
Зашто то мора да буде струцт ноде * следећи? Да.
[Студентски] То је као бесконачну петљу.
Да.
[Студентски] Све би било у једном.
Да, само мислим о томе како ћемо урадити величину или тако нешто.
Величина једног струцт је у основи + или - неки образац овде или тамо.
То је у основи ће бити збир величина ствари у струцт.
Овај овде, не мењајући ништа, величина ће бити лако.
Величина струцт ноде ће бити величине и + величине следећи.
Величина и је бити 4. Величина од идуће ће бити 4.
Величина струцт ноде ће бити 8.
Ако ми немамо *, мислећи на сизеоф,
онда сизеоф (и) ће бити 4.
Величина струцт ноде поред ће бити величине И + величина струцт ноде следећег
+ И + величина величине струцт ноде следећи.
Било би бескрајно рекурзије чворова.
То је разлог зашто је то како ствари треба да буде.
>> Опет, дефинитивно памте да је,
или бар да разумем довољно да можете бити у стању да
Разлог кроз оно што би требало да изгледа.
Ствари идемо да жели да спроведе.
Ако дужина листе,
можеш преварити и држати око
Глобална дужина или тако нешто, али ми нећемо да се то уради.
Идемо да израчуна дужину листе.
Ми смо садржи, тако да је то у основи као претрагу,
тако да имамо повезане списак бројева да види ако је то цео је у повезаној листи.
Препенд ће убацити на почетку листе.
Аппенд ће убацити на крају.
Инсерт_сортед ће убаците у сортираном позицију на листи.
Инсерт_сортед врста претпоставља да никада није користио препенд или додате у лошим начине.
>> Инсерт_сортед кад имплементацији инсерт_сортед-
рецимо имамо повезане листе.
То је оно што тренутно изгледа, 2, 4, 5.
Желим да убаците 3, докле год сама листа је већ сортиран,
то је лако наћи где 3 припада.
Почнем на 2.
Ок, 3 је већи од 2, тако да желим да наставим.
О, 4 је превелик, тако да знам 3 је отићи између 2 и 4,
и морам да поправим тројке и све те ствари.
Али ако нисмо користили строго инсерт_сортед,
као рецимо ја препенд 6,
онда мој линкед листа ће постати ово.
Сада нема смисла, тако да је за инсерт_сортед, можете само претпоставити
да листа сортирана, иако постоје операције
што може довести до тога да не буде сортиран, и то је то.
Пронађи помоћи убаци-тако, то су главне ствари које ћеш морати да спроведе.
>> За сада, узмите мало да дужину и садржи,
и они би требало да буде релативно брзо.
Ближи затварању време, тако да свако има нешто за дужину или садржи?
Они ће бити готово идентична.
[Студентски] Дужина.
Хајде да видимо, ревизију.
Ок.
Хоћеш да објасним?
[Студентски] Управо сам направити чвор показивача и покрене га прво, што је наша глобална променљива,
и онда сам провери да ли је то нула, тако да не добијем СЕГ грешку и вратили 0 ако је то случај.
Иначе, петља кроз, вођење рачуна о року цео
колико пута сам приступити следећи елемент листе
и у истој операцији прираст приступити да стварни елемент,
и онда сам стално да провере да ли је то нула,
и ако је нула, онда прекида и само враћа број елемената сам приступити.
>> [Роб Б.] Да ли неко има било какве коментаре о било чему?
Ово изгледа фино исправност мудрим.
[Студент] Мислим да не треба чвор == нулл.
Да, па ако чвор == нулл повратак 0.
Али ако чвор == нулл онда ово-ох, ту је исправност питање.
То је био само си ја врати, али није у обиму сада.
Ви само треба инт, па сам = 0.
Али ако чвор је нулл, онда сам још увек ће бити 0,
и ми ћемо вратити 0, тако да је ово случај је идентичан.
Друга заједничка ствар је да декларацију
од чвора унутрашње за петљу.
Могло би се рећи, ох, не.
Будимо је као ово.
Вероватно бих ставио инт и = 0 одавде,
онда чвор * чвор = први овде.
И ово је вероватно како-отарасили ово сада.
Ово је вероватно како бих га написао.
Ви би такође, гледа на то овако.
Ово је за петље структуру овде
би требало да буде готово као природно за вас као и за инт и = 0
и је мање од дужине низа + + и.
Ако је то како сте прелазили преко низа, то је како сте прелазили преко повезаних листи.
>> Ово би требало да буде друга природа у неком тренутку.
Имајући то у виду, ово ће бити готово иста ствар.
Ти ћеш желети да вршите итерацију кроз повезану листу.
Ако чвор-Немам појма шта је вредност се зове.
Чвор и.
Ако вредност у том чвору = и врати истина, и то је то.
Обратите пажњу на то једини начин смо икада вратити фалсе
је ако смо прелазили преко целог повезаног листе и никад не врате тачно,
тако да је оно што овај ради.
Као страни белешку, вероватно нећемо добити бисте додали или препенд.
>> Брзо последња напомена.
Ако видите статички кључну реч, па рецимо инт цоунт = 0,
онда ми број + +, што у основи могу мислити о томе као глобална променљива,
иако сам рекао да ово није начин ћемо спровести дужину.
Ја радим овде ово, а онда рачунају + +.
Било који начин можемо ући чвор у нашу повезаној листи смо увецава нашу број.
Поента је што статички кључна реч значи.
Ако сам управо имао инт цоунт = 0 да би редовна стара глобална променљива.
Шта инт Број значи да је глобална променљива у овом фајлу.
Немогуће је за неки други фајл,
свиђа мислим псет 5, ако сте почели.
Имате обе спеллер.ц, а имате дицтионари.ц,
а ако само прогласи нешто глобално, онда ништа спеллер.ц
може се приступити у дицтионари.ц и обрнуто.
Глобалне променљиве су доступне било ц фајла.,
али статички променљиве су доступни само из саме датотеке,
па унутар правописа или унутрашњости дицтионари.ц,
ово је врста како бих изјављујем своју променљиву за величину мог низа
или величину мог броја речи у речнику.
Пошто ја не желим да се изјасни глобалну променљиву да свако има приступ,
Ја заиста само стало за своје потребе.
>> Добра ствар у вези овога је и цело име судар ствари.
Ако неки други фајл покушава да користи глобалну променљиву под именом гроф, ствари иду веома, веома лоше,
тако да је ово лепо држи ствари сигурно, и само ви можете да приступите,
и нико други не може, а ако неко други прогласи глобалну променљиву зове тацка,
онда неће ометати ваше статичне променљиве зове гроф.
То је оно што је статично. То је фајл глобална променљива.
>> Питања о било чему?
Све је спремно. Ћао.
[ЦС50.ТВ]