[Powered by Google Translate] [Частка 6] [больш камфортным]
[Rob Боуден] [Harvard University]
[Гэта CS50.] [CS50.TV]
>> Мы можам адправіцца ў нашым раздзеле пытанняў.
Я паслаў URL для касмічных раней.
У пачатку падзелу пытанняў кажаце-
мабыць я не зусім unsick-гэта вельмі просты пытанне
усяго таго, што Valgrind?
Што Valgrind рабіць?
Любы хачу сказаць, што Valgrind робіць?
[Студэнт] Праверка уцечак памяці.
Так, Valgrind агульная праверка памяці.
Гэта, у рэшце рэшт, кажа вам, калі ў вас ёсць нейкія ўцечкі памяці,
які ў асноўным тое, што мы выкарыстоўваем яго для, таму што, калі вы хочаце
атрымаць поспех у задачы набору або калі вы хочаце
атрымаць на вялікай дошцы, вы павінны мець уцечак памяці наогул,
і ў выпадку, калі ёсць уцечкі памяці, якія вы не можаце знайсці,
Таксама майце на ўвазе, што кожны раз, калі вы адкрываеце файл
і калі вы не зачыніце яго, што гэта ўцечка памяці.
>> Многія людзі шукаюць для некаторых вузлоў, што яны не вызваляючы
калі на самай справе, яны не зачыніць слоўнік у самы першы крок.
Ён таксама кажа вам, калі ў вас ёсць нейкія несапраўдным чытае або піша,
што азначае, калі вы спрабуеце ўсталяваць значэнне
што гэта за канец кучы і гэта не адбудзецца ў сегменце віна
але Valgrind ловіць яго, як вы на самай справе не павінна быць пісьмова там,
і такім чынам, вы дакладна не павінны мець любы з гэтых таксама.
Як вы выкарыстоўваеце Valgrind?
>> Гэта агульны пытанне
выгляд запусціце яе і паглядзіце на выхадзе.
Выхад пераважнай шмат разоў.
Там жа, дзе весела памылкі, калі ў вас ёсць некаторыя вельмі няправільныя рэчы
адбываецца ў цыкле, то яна будзе ў канчатковым выніку сказаць: "Занадта шмат памылак.
Я збіраюся спыніць падлік цяпер ".
Гэта ў асноўным тэкставы выснову, што вам прыйдзецца разабраць.
У рэшце рэшт, ён скажа вам любы уцечкі памяці, якія ў вас ёсць,
колькі блокаў, якія могуць быць карысныя, таму што
калі гэта адзін блок unfreed, то яна, як правіла, лягчэй знайсці
чым 1.000 блокаў unfreed.
1000 блокаў unfreed, верагодна, азначае, што вы не вызваляючы
ваша звязаныя спісы належным ці чамусьці.
Гэта Valgrind.
>> Цяпер у нас ёсць раздзел пытанняў,
якія вам не патрэбныя для загрузкі.
Вы можаце націснуць на маё імя, і пацягнуць іх у прасторы.
Цяпер націсніце на мяне.
1-я рэдакцыя будзе стэк, які мы робім у першую чаргу.
Перагляд 2 будзе чарзе, і 3-я рэдакцыя будзе аднанакіраваныя спісу.
Пачаўшы з нашым стэкам.
Як сказана тут, стэк з'яўляецца адным з самых асноўных,
фундаментальныя структуры дадзеных, інфарматыкі.
Сам прататып прыкладу
стос талерак у сталовай.
Гэта ў асноўным, калі вы ўводзяцца ў стэк,
нехта скажа: "О, як стэк латкоў".
Вы стэк латкамі.
Затым, калі вы ідзяце выцягнуць латок,
1. латок, які становіцца выцягнуў з'яўляецца апошняй, якая была ўведзена ў стэку.
Стэк таксама, як ён кажа тут-
у нас ёсць сегмент памяці, званай стэкам.
І чаму гэта называецца стэкам?
>> Таму што, як структуры дадзеных стэка,
ён штурхае і з'яўляецца кадры стэка ў стэк,
дзе кадры стэка падобныя на канкрэтны выклік функцыі.
І, як стэк, вы заўсёды будзеце мець, каб вярнуцца
ад выкліку функцыі, перш чым спускацца ў ніжнія кадры стэка зноў.
Вы не можаце мець галоўны выклік Foo Bar выкліку і бар вяртанне да асноўнага напрамую.
Ён заўсёды павінны прытрымлівацца правільным стэк націску і з'яўляюцца.
Дзве аперацыі, як я ўжо сказаў, штуршок і поп-музыкі.
Гэта універсальныя тэрміны.
Вы павінны ведаць, штуршок і поп-музыкі з пункту гледжання стэкі ні на што.
Мы ўбачым чарзе выгляд іншы.
Гэта сапраўды не мае універсальнага тэрміна, але штуршок і поп з'яўляюцца універсальнымі для стэкаў.
Штуршок проста пакласці на стэк.
Поп-гэта ўзяць з стэка.
І мы бачым, тут у нас ёсць ЬурейеЕ стэк структуры,
таму мы павінны знакаў радкі **.
Не палохайцеся любой **.
Гэта будзе ў канчатковым выніку масіў радкоў
або масіў паказальнікаў на знакі, дзе
паказальнікаў на знакі, як правіла, радка.
Гэта не павінны быць радкамі, але тут яны збіраюцца быць радкамі.
>> У нас ёсць масіў радкоў.
У нас ёсць памер, які ўяўляе, колькі элементаў у цяперашні час у стэку,
і ў нас ёсць патэнцыял, які, як многія элементы могуць быць у стэку.
Ёмістасць павінна пачацца як нешта большае, чым 1,
але памер будзе пачынацца як 0.
Цяпер, у асноўным існуюць тры розных спосабу вы можаце думаць аб стэку.
Ну, ёсць, верагодна, больш, але два асноўных шляху
Вы можаце ажыццявіць гэта з дапамогай масіва, ці вы можаце рэалізаваць яго з дапамогай звязанага спісу.
Звязаныя спісы з'яўляюцца свайго роду трывіяльная, каб стэк с.
Гэта вельмі лёгка зрабіць стэк з дапамогай звязаных спісаў,
дык вось, мы збіраемся зрабіць стэк з дапамогай масіва,
а затым з дапамогай масіваў, ёсць таксама два шляхі вы можаце думаць пра гэта.
Раней, калі я сказаў, у нас ёсць патэнцыял для стэка,
так што мы можам адпавядаць элементу ў стэку.
>> Аднаго боку, гэта магло адбыцца, як толькі вы націснеце 10 элементаў, то вы зрабілі.
Магчыма, вы ведаеце, што ёсць верхняя мяжа з 10 рэчаў у свеце
што вы ніколі не будзеце мець больш, чым 10 рэчаў, на ваш стэк,
У гэтым выпадку вы можаце мець верхнюю мяжу памеру вашага стэка.
Ці вы маглі б ваш стэк быць неабмежаваным,
Але калі вы робіце масіў, гэта азначае, што кожны раз, калі вы патрапілі 10 элементаў,
тады вы будзеце мець, каб вырасці да 20 элементаў, і калі вы патрапілі 20 элементаў,
Вам прыйдзецца вырошчваць масіва да 30 элементаў і 40 элементаў.
Вы будзеце мець патрэбу, каб павялічыць прапускную здольнасць, якая з'яўляецца тое, што мы збіраемся зрабіць тут.
Кожны раз, калі мы дасягаем максімальнага памеру нашага стэка,
калі мы націскаем на нешта іншае, мы будзем мець патрэбу, каб павялічыць прапускную здольнасць.
Тут мы штуршок абвешчаныя як BOOL штуршок (сімвал * вул).
Char * вул ўяўляе сабой радок, мы дамагаемся ў стэк,
і BOOL проста кажа ці мы поспеху або няўдачы.
>> Як мы можам патрываць няўдачу?
Што з'яўляецца адзіным акалічнасцю, што вы можаце думаць аб
дзе мы павінны былі б вярнуцца ілжывым?
Так.
[Студэнт] Калі гэта поўная і мы выкарыстоўваем абмежаваную рэалізацыю.
Так, так як мы вызначаем, ён адказаў
калі гэта поўная і мы выкарыстоўваем абмежаванай рэалізацыі.
Тады мы вызначана вернемся ілжывым.
Як толькі мы трапілі 10 рэчаў, якія ў масіве, мы не можа змясціцца 11, так што мы вяртаемся ілжывым.
Што, калі яна не абмежаваная? Так.
Калі вы не можаце пашырыць масіў па некаторых прычынах.
Так, так што памяць з'яўляецца абмежаваным рэсурсам,
і ў рэшце рэшт, калі мы працягваць настойваць рэчы ў стэк зноў і зноў,
Мы збіраемся паспрабаваць і вылучыць большы масіў, каб адпавядаць
вялікую ёмістасць, і таНос або любы іншы мы выкарыстоўваем збіраецца вярнуцца ілжывым.
Ну, таНос верне NULL.
>> Памятаеце, што кожны раз, калі вы тэлефануеце таНос, вы павінны правяраць, каб убачыць, калі яна
вяртае нулявы ці яшчэ што правільнасць высновы.
Так як мы хочам мець неабмежаваны стэка,
Адзіны выпадак, мы збіраемся вяртацца ілжывым, калі мы паспрабуем
павялічыць магутнасць і таНос або што вяртае хлусня.
Тады поп не прымае аргументаў,
і яна вяртае радок, якая знаходзіцца на вяршыні стэка.
Якім бы ні быў нядаўна ў стэк з'яўляецца тое, што поп вяртаецца,
і ён таксама выдаляецца з стэка.
І заўважыў, што ён вяртае нулявое значэнне, калі няма нічога ў стэк.
Гэта заўсёды магчыма, што стэк пусты.
У Java, калі вы прывыклі да гэтага, або іншых моў,
спрабуюць поп з пустога стэка можа выклікаць выключэнне ці чамусьці.
>> Але ў C, нулявыя гэта свайго роду шмат выпадкаў, як мы спраўляемся з гэтымі праблемамі.
Вяртаючыся нулявы, як мы збіраемся, каб паказаць, што стэк быў пусты.
Мы далі код, які будзе правяраць функцыянальнасць вашага стэка,
ажыццяўленне штурхаць і поп-музыкі.
Гэта не будзе шмат кода.
Я волі на самай справе, перш чым мы гэта зробім, намёк, падказка-
Калі вы яшчэ не бачылі яго, таНос гэта не адзіная функцыя
, Якая вылучае памяць у кучы для вас.
Ёсць сем'і ідэнтыфікатар функцыі.
Першы таНос, якія вы прывыклі.
Тады ёсць calloc, якая робіць тое ж самае, што і таНос,
але гэта будзе нуля ўсе для вас.
Калі вы калі-небудзь хацелі, каб усталяваць усё да нуля пасля mallocing нешта
Вы павінны проста выкарыстоўваць calloc, у першую чаргу, а не пісаць
цыкл абнуліць ўвесь блок памяці.
>> Realloc, як таНос і мае шмат асаблівых выпадкаў,
але ў асноўным тое, што робіць пераразмеркаваць
яна прымае паказальнік, якія ўжо былі вылучаныя.
Realloc з'яўляецца функцыяй, якую неабходна звяртаць увагу на тут.
Ён прымае паказальнік, які ўжо вярнуўся з таНос.
Дапушчальны, вы патрабаваць ад таНос паказальнік з 10 байт.
Пазней вы усведамляеце, што вы жадалі 20 байт,
так вы тэлефануеце пераразмеркаваць на гэтым паказальнік з 20 байт,
і пераразмеркаваць аўтаматычна скапіяваць усё за вас.
Калі вы толькі што патэлефанаваў таНос зноў, як і ў мяне ёсць блок з 10 байт.
Цяпер мне трэба блок з 20 байт,
так што калі я таНос 20 байт, то мне прыйдзецца ўручную скапіяваць 10 байт з першай рэччу
у другую рэч, а затым вызваліць першае.
Realloc будзе апрацоўваць гэта для вас.
>> Звярніце ўвагу, што подпіс будзе несапраўднай *,
які проста вяртае паказальнік на блок памяці,
Затым пустэчы * паказальнік.
Вы можаце думаць аб пустаце * як агульны паказальнік.
Наогул, вы ніколі не мець справу з несапраўднымі *,
але таНос вяртаецца пустата *, а затым проста выкарыстоўваць як
гэта на самай справе будзе сімвал *.
* Папярэднія пустэчу, якая была вернута на таНос
Цяпер будзе перададзены пераразмеркаваць, а затым памер
гэта новае лік байт вы жадаеце вылучыць, так што вашы новыя магутнасці.
Я дам вам некалькі хвілін, і зрабіць гэта ў нашай прасторы.
Пачніце з перагляду 1.
Я спыню цябе пасьля спадзяюся, аб дастаткова часу для ажыццяўлення штуршок,
і тады я дам табе яшчэ адзін перапынак, каб зрабіць поп-музыкі.
Але на самай справе гэта не так ужо шмат кода.
Найбольш кода, верагодна, пашырае матэрыял, пашырэнне магутнасцяў.
Добра, ніякага ціску, каб быць цалкам зроблена,
але пакуль вы адчуваеце, што знаходзіцеся на правільным шляху, гэта добра.
>> Хто-небудзь ёсць код, які яны адчуваюць сябе камфортна са мной, пацягнуўшы ўверх?
Так, я хачу, а не каго-небудзь ёсць код я магу пацягнуць?
Добра, вы можаце пачаць, захавайце яго, што гэта такое?
Я заўсёды забываю, што крок.
Добра, гледзячы на ​​штуршок,
Вы хочаце, каб растлумачыць свой код?
[Студэнт] Па-першае, я павялічыў памер.
Я думаю, можа быць, я павінен мець што-ўсё роўна, я павялічыў памер,
і я не бачу, калі ён менш, чым ёмістасць.
І калі гэта менш, чым ёмістасць, дадаць у масіў, што мы ўжо маем.
А калі гэта не так, я памножыць магутнасць на 2,
і я пераразмеркаваць радкоў масіва нешта з большай магутнасцю памер цяпер.
І потым, калі гэта не атрымоўваецца, я кажу карыстальніка і вярнуцца ілжывым,
і калі ўсё нармальна, то я стаўлю радок у новым месцы.
>> [Rob B.] Таксама звернеце ўвагу, што мы выкарыстоўвалі добры аператар пабітава тут
памножыць на 2.
Памятаеце, што зрух налева заўсёды будзе памножыць на 2.
Зрух направа дзеліцца на 2, пакуль вы памятаеце, што гэта азначае
дзелім на 2, як у цэлы лік дзеліцца на 2.
Гэта можа абрэзаць на 1 тут ці там.
Але зрух налева на 1 заўсёды будзе неабходна памножыць на 2,
калі вы перапаўнення межы цэлага, і тады яна не будзе.
Бакі каментара.
Мне падабаецца рабіць-гэта не збіраецца мяняць кадавання любой форме,
Але я хацеў бы зрабіць нешта накшталт гэтага.
Гэта на самай справе адбываецца, каб зрабіць яго крыху даўжэй.
Можа быць, гэта не ідэальны выпадак, каб паказаць гэта,
але мне падабаецца сегменце яго ў гэтыя блокі-
Добра, калі гэта, калі адбудзецца, то я буду нешта рабіць,
, А затым функцыя выконваецца.
Мне не трэба, каб потым пракруціць мае вочы ўсё, аж функцыі
, Каб убачыць, што адбываецца пасля другога.
Гэта, калі гэта, калі адбудзецца, то я проста вярнуцца.
Яна таксама мае добрае дадатковае перавага ўсё, што за гэтым
У цяперашні час зрушваецца налева адзін раз.
Я больш не трэба, калі вы заўсёды побач смешнага доўгія чэргі,
Затым гэтыя 4 байта можа дапамагчы, а таксама лявей нешта ёсць,
менш перагружаны вы сябе адчувалі, калі хочаце, добра, я павінен памятаць,
Я ў цяперашні час знаходжуся ў той час як цыкл ўнутры іншага ўнутры цыклу.
Усюды вы можаце зрабіць гэта вяртанне неадкладна, я накшталт як.
Гэта зусім неабавязковым і не чакаў ніяк.
>> [Студэнт] Ці павінны быць памерам - у абавязковым парадку ўмовы?
Абавязкова ўмова тут мы не змаглі пераразмеркаваць, так што так.
Звярніце ўвагу, што ў абавязковым парадку ўмова, па-відаць,
калі мы бясплатна рэчы пазней, мы заўсёды будзем на правал
незалежна ад таго, колькі разоў мы спрабуем падштурхнуць нешта.
Калі мы будзем працягваць настойваць, мы працягваем павялічваючы памер,
нават калі мы не ставіць нічога ў стэк.
Звычайна мы не павялічваем памер да
пасля таго, як мы паспяхова пакласці яго ў стэк.
Мы хацелі б гэта зрабіць, скажам, альбо тут і тут.
І тады замест таго каб сказаць s.size ≤ патэнцыял, гэта менш, чым магутнасць,
толькі таму, што мы пераехалі, дзе ўсё было.
>> І памятайце, што адзінае месца, дзе мы маглі б вярнуцца ілжывым
Тут, дзе пераразмеркаваць вяртаецца нуль,
і калі Вы выпадкова не памятаеце стандартная памылка,
Можа быць, вы маглі б разгледзець гэты выпадак, калі вы хочаце друкаваць стандартныя памылкі,
так Fprintf STDERR, а не проста друк непасрэдна на стандартны вывад.
Зноў жа, гэта не чаканне, але калі гэта памылка,
Калі ласка, увядзіце Printf, то вы можаце зрабіць гэта друк на стандартнай памылкі, а не стандартны вывад.
>> Любы, ёсць што-небудзь яшчэ адзначыць? Так.
[Студэнт] Ці можаце вы перайсці на [неразборліва]?
[Rob B.] Так, фактычна binariness гэта ці проста, што гэта такое?
[Студэнт] Такім чынам, вы памножыць на 2?
[Rob B.] Так, у асноўным.
У двайковай зямлі, у нас заўсёды ёсць наш набор лічбаў.
Пераход гэтым левая на 1 асноўным ўстаўляе яго тут, на правай баку.
Вярнуцца да гэтага, проста памятаеце, што ўсё ў двайковым
з'яўляецца ступенню 2, так што гэта ўяўляе 2 да 0,
гэта 2 да 1, гэта 2 да 2.
Дадаючы 0 да правага боку зараз, мы проста перакласці ўсё скончана.
Тое, што было 2 да 0, у цяперашні час 2 да 1, 2 да 2.
На правай баку, што мы ўставілі
абавязкова будзе 0,
які мае сэнс.
Калі вы калі-небудзь памножыць лік на 2, гэта не будзе ў канчатковым выніку няцотных,
так што 2 да 0 месца павінна быць 0,
і гэта тое, што першае паўгоддзе папярэдзіў, перш чым ёсць, калі вы ўсё ж такі перайсці
за колькасць біт у цэлае,
то гэта 1, будзе ў канчатковым выніку сыходзіць.
Гэта адзінае неспакой, калі вам здарыцца мець справу з сапраўды вялікімі магчымасцямі.
Але ў гэты момант, то вы маеце справу з масівам мільярды рэчаў,
якая можа не змясціцца ў памяці ў любым выпадку.
>> Цяпер мы можам дабрацца да поп-музыкі, якая яшчэ прасцей.
Вы можаце зрабіць гэта падабаецца, калі вам здарыцца поп цэлая куча,
і цяпер вы ў палову магутнасці зноў.
Вы маглі б пераразмеркаваць, каб паменшыць аб'ём памяці ў вас ёсць,
але вы не павінны турбавацца аб тым, што, такім чынам, адзіны выпадак, пераразмеркаваць будзе
якая расце памяці, ніколі не скарачэнне памяці,
які збіраецца зрабіць поп-супер проста.
Зараз у чарзе, які будзе, як стэкі,
але для таго, каб узяць рэчы на ​​супрацьлеглае.
Найпросты прыклад з чаргі лініі,
таму я думаю, калі б вы былі на англійскай, я б сказаў,
Найпросты прыклад з чаргі ў чаргу.
Так як лінія, калі вы першы чалавек у лініі,
Вы чакаеце, каб быць першым чалавекам з чаргі.
Калі вы апошні чалавек у лініі, вы збіраецеся быць апошнім чалавекам у рамонт.
Мы называем гэта FIFO мадэлі, у той час як стэк LIFO шаблоне.
Гэтыя словы з'яўляюцца даволі універсальнымі.
>> Як стэкі і ў адрозненне ад масіваў, чэргаў звычайна не дапускаюць доступ да элементаў у сярэдзіне.
Тут, стэк, мы павінны штурхаць і поп-музыкі.
Тут мы, здараецца, называюць іх пастаноўкі ў чаргу і выдалення з чаргі.
Акрамя таго, я чуў, як яны называюць зрухам і Адмяніць замену.
Я чуў, людзі кажуць, штуршок і поп прымяняюцца таксама да чэрг.
Я чуў, ўстаўкі, выдалення,
так штурхаць і поп, калі вы кажаце пра стэкі, вы штурхаеце і пляскаць.
Калі вы кажаце аб чэргах, вы маглі б абраць словы, якія вы хочаце выкарыстоўваць
для ўстаўкі і выдаленні, і няма адзінага меркавання пра тое, што яны павінны быць названыя.
Але тут, у нас ёсць паставіць у чаргу і выдалення з чаргі.
Цяпер, структура выглядае амаль ідэнтычна стэк структуры.
Але мы павінны сачыць за галаву.
Я думаю, гэта кажа тут, але чаму мы маем патрэбу ў галаву?
Прататыпы ў асноўным ідэнтычныя штурхаць і поп-музыкі.
Вы можаце думаць пра гэта як штуршок і поп-музыкі.
Розніца толькі ў тым поп вяртаецца, замест апошняга, то ён вяртае першы.
2, 1, 3, 4, ці нешта яшчэ.
І вось старт.
Наша чаргу цалкам запоўненая, так што чатыры элемента ў ім.
У канцы нашай чэргі ў цяперашні час 2,
і зараз мы ідзем, каб ўставіць нешта іншае.
>> Калі мы хочам, каб ўставіць нешта іншае, што мы зрабілі для стэка версія
гэта мы пашырылі наш блок памяці.
У чым праблема з гэтым?
[Студэнт] Вы рухаецеся 2.
Як я ўжо казаў пра канец чаргі,
гэта не мае сэнсу, што мы пачынаем з 1,
Затым мы хочам, каб з чаргі 1, то з чаргі 3, то з чаргі 4,
то з чаргі 2, то з чаргі гэтага.
Мы не можам выкарыстоўваць пераразмеркаваць зараз,
або, па крайняй меры, вы павінны выкарыстоўваць пераразмеркаваць па-іншаму.
Але вы, верагодна, не варта выкарыстоўваць толькі пераразмеркаваць.
Вы будзеце павінны ўручную скапіяваць памяці.
>> Ёсць дзве функцыі для капіявання памяці.
Там у memcopy і memmove.
Я зараз чытаю чалавек старонак, каб убачыць, які вы збіраецеся хочаце выкарыстаць.
Добра, memcopy, розніца
што memcopy і memmove, адзін апрацоўвае выпадку правільна
дзе вы капіруеце ў рэгіёне, што адбываецца перакрыцце рэгіёне
Вы капіяванні.
Memcopy не справіцца. Memmove робіць.
Вы можаце думаць аб праблеме, як-
скажам, я хачу, каб скапіяваць гэты хлопец,
гэтыя чатыры з гэтым хлопцам старэй.
У рэшце рэшт, тое, што масіў павінен выглядаць
пасля таго, як копія 2, 1, 2, 1, 3, 4, а затым некаторыя рэчы ў канцы.
Але гэта залежыць ад парадку, у якім мы на самай справе капіяваць,
бо калі мы не лічым той факт, што рэгіён мы капіявання ў
перакрывае адзін мы капіяванні,
Затым мы маглі б зрабіць, як пачаць тут, капіяванне 2 у месца, дзе мы хочам пайсці,
затым перамясціць нашы паказальнікі наперад.
>> Цяпер мы збіраемся быць тут і тут, і цяпер мы хочам, каб скапіяваць
гэты хлопец за гэтым хлопцам, і перамясціць нашы паказальнікі наперад.
Тое, што мы збіраемся ў канчатковым выніку атрымаць у 2, 1, 2, 1, 2, 1
замест таго, каб адпаведныя 2, 1, 2, 1, 3, 4, таму што
2, 1 пераадолеў арыгінальны 3, 4.
Memmove апрацоўвае гэта правільна.
У гэтым выпадку, у асноўным заўсёды выкарыстоўваць memmove
таму што ён працуе правільна.
Як правіла, ён не выконвае горш.
Ідэя складаецца ў тым, а не з пачатку і капіяванні такім чынам,
як мы толькі што зрабілі тут, яна пачынаецца з канца і капіюе у,
і ў гэтым выпадку, вы не можаце мець праблемы.
Там прадукцыйнасць не страціў.
Заўсёды выкарыстоўвайце memmove. Ніколі не турбуйцеся аб memcopy.
І вось, калі вы будзеце мець, каб асобна memmove
абгорнуты вакол часткі вашай чаргі.
Не хвалюйцеся, калі не цалкам зроблена.
Гэта цяжэй, чым стэк, штуршок, і поп-музыкі.
>> Любы, ёсць якія-небудзь кода мы маглі б працаваць?
Нават калі цалкам няпоўным?
[Студэнт] Так, гэта зусім няпоўным, аднак.
Цалкам няпоўнай выдатна да тых часоў, як мы, вы можаце зэканоміць перагляду?
Я забываю, што кожны раз.
Добра, ігнаруючы тое, што адбываецца, калі мы павінны змяніць памер рэчы.
Цалкам ігнараваць змены памеру.
Патлумачыць код.
Я правяраю, перш за ўсё, калі памер менш, чым копія, перш за ўсё,
і пасля гэтага, я ўстаўляю-я бяру галаву + памер,
і я пераканацца, што яна абцякае ёмістасць масіва,
і я ўставіць новую радок у гэтым становішчы.
Тады я павялічыць памер і вярнуць праўдзівы.
>> [Rob B.] Гэта, безумоўна, адзін з тых выпадкаў, калі вы захочаце выкарыстоўваць мод.
Любы выпадак, калі вы паплаўкоў, калі вы думаеце паплаўкоў,
непасрэднай думка павінна быць мода.
Як хутка аптымізацыі / зрабіць ваш код адну радок карацей,
Вы заўважылі, што радкі адразу пасля гэтага
толькі памер + +, так што вы аб'ядноўваеце, што ў гэтую лінію, памер + +.
Цяпер тут мы маем выпадак
, Дзе ў нас не хапае памяці,
так мы павялічваем нашу здольнасць на 2.
Я думаю, вы маглі б мець тыя ж праблемы, але мы можам ігнараваць гэта цяпер,
, Дзе, калі вы не змаглі павялічыць магутнасць,
то вы будзеце жадаць, каб паменшыць ёмістасць на 2 зноў.
Іншы кароткую запіску гэтак жа, як вы можаце зрабіць, + =,
Вы таксама можаце зрабіць << =.
Амаль усё, што можа пайсці да роўных, + =, | =, & =, << =.
Char * новы наш новы блок памяці.
О, тут.
>> Што людзі думаюць пра тып наш новы блок памяці?
[Студэнт] Ён павінен быць знак **.
Успамінаючы нашу структуру тут,
радкоў тое, што мы пераразмеркавання.
Мы робім зусім новы дынамічнай памяці для элементаў у чарзе.
Тое, што мы збіраемся прызначэнні на вашы радкі з'яўляецца тое, што мы mallocing прама зараз,
і так новая будзе сімвал **.
Гэта будзе масіў радкоў.
Тады ў чым жа справа, па якім мы збіраемся вярнуцца ілжывым?
[Студэнт] мы павінны рабіць знакаў *?
[Rob B.] Так, добры выклік.
[Студэнт] Што гэта было?
[Rob B.] Мы хацелі зрабіць памер сімвалаў *, таму што мы ўжо не-
гэта фактычна будзе вельмі вялікая праблема, таму што SizeOf (Char) будзе 1.
Sizeof сімвал * будзе 4,
так шмат разоў, калі вы маеце справу з цэлымі,
Вы, як правіла, усё сыдзе з рук, таму што памер Int і памер Int *
на 32-разрадныя сістэмы будзе тое ж самае.
Але тут, SizeOf (Char) і SizeOf (Char *) зараз будзе тое ж самае.
>> Што такое акалічнасць, дзе мы вярнуцца ілжывым?
[Студэнт] Новы роўны нулю.
Так, калі новы пусты, мы вяртаемся ілжывымі,
і я збіраюся кінуць тут-
[Студэнт] [неразборліва]
[Rob B.] Так, гэта выдатна.
Вы можаце альбо рабіць 2 разы магутнасць або ёмістасць зрух 1, а затым толькі ўсталяваць яго тут або любы іншы.
Мы зробім гэта, як у нас было.
Ёмістасць >> = 1.
І вы ніколі не прыйдзецца турбавацца аб страце 1-Месца
таму што вы пакінулі ссунуты на 1, таму 1-Месца абавязкова 0,
так прама зрух на 1, вы ўсё яшчэ будзе добра.
[Студэнт] Вам неабходна зрабіць гэта да вяртання?
[Rob B.] Так, гэта не мае абсалютна ніякага сэнсу.
>> Зараз выкажам здагадку, што мы збіраемся ў канчатковым выніку вяртаецца сапраўдным да канца.
Як мы збіраемся зрабіць гэта memmoves,
Мы павінны быць асцярожныя з тым, як мы іх робім.
Хто-небудзь ёсць якія-небудзь прапановы аб тым, як мы іх робім?
Вось наш старт.
Безумоўна, мы хочам пачаць з самага пачатку яшчэ раз
і копіі рэчаў у Адтуль, 1, 3, 4, 2.
Як вы гэта зрабілі?
Па-першае, я павінен глядзець на мужчыну старонкі для memmove зноў.
Memmove, парадак аргументаў заўсёды важна.
Мы хочам, каб наша прызначэнне першага, другога крыніцы, памеру трэцяга.
Ёсць шмат функцый, якія зваротным крыніцы і прызначэння.
Напрамак, крыніца, як правіла, адпавядае некалькі.
Move, што гэта вяртанне?
Яна вяртае паказальнік да месца прызначэння, па якой прычыне вы, магчыма, захочаце гэтага.
Я магу сабе чытаць, але мы хочам рухацца ў нашым прызначэння.
>> Тое, што наш пункт прызначэння будзе?
[Студэнт] New.
[Rob B.] Так, і дзе мы капіяванні?
Першае, што мы капіяваны гэта 1, 3, 4.
Што такое-гэта 1, 3, 4.
Што такое адрас гэтага 1?
Што гэта адрас, што 1?
[Студэнт] [неразборліва]
[Rob B.] Кіраўнік + адрас першага элемента.
Як мы можам атрымаць першы элемент у масіве?
[Студэнт] Queue.
[Rob B.] Так, q.strings.
Памятаеце, што тут, нашы галовы 1.
Цыраваць яго. Я проста думаю, што гэта чароўна-
Тут нашы галовы 1. Я збіраюся мяняць свой колер таксама.
А вось радка.
Гэта, мы можам альбо напісаць яго, як мы зрабілі тут
з кіраўнікамі + q.strings.
Шмат людзей таксама пісаць і q.strings [кіраўнік].
У рэчаіснасці гэта не любое менш эфектыўным.
Вы можаце думаць пра гэта, як вы разнаймення яго, а затым атрымаць адрас,
але кампілятар збіраецца перавесці яго на тое, што мы былі прадстаўлены ва ўсякім выпадку, q.strings + галава.
У любым выпадку вы хочаце, каб думаць пра гэта.
>> І колькі байт мы хочам, каб скапіяваць?
[Студэнт] Магутнасць - галава.
Ўмяшчальнасць - галава.
І тады вы заўсёды можаце напісаць прыклад
каб высветліць, калі гэта так.
[Студэнт] Яна павінна быць падзелена на 2, то.
Так, таму я думаю, мы маглі б выкарыстоўваць памер.
У нас яшчэ ёсць памер быцця-
з выкарыстаннем памеру, у нас ёсць памер, роўны 4.
Наш памер 4. Нашы галовы 1.
Мы хочам, каб скапіяваць гэтыя 3 элемента.
Гэта здаровае праверыць, што памер - галава правільна 3.
І вяртацца сюды, як мы ўжо казалі,
калі б мы выкарыстоўвалі патэнцыял, то мы павінны былі б падзяліць на 2
таму што мы ўжо выраслі нашы магчымасці, таму замест гэтага мы збіраемся выкарыстаць памер.
Гэта копій гэтай частцы.
Цяпер нам трэба скапіяваць іншая частка, частка, што засталося ад самага пачатку.
>> Гэта збіраецца memmove у якім становішчы?
[Студэнт] Вялікія памеры - галава.
Так, так мы ўжо скапіявалі ў памеры - кіраўнік байт,
і таму там, дзе мы хочам скапіяваць тыя, што засталіся байты новага
, А затым памер мінус, ну, колькасць байт, мы ўжо скапіявалі цалі
А потым куды мы капіяванні?
[Студэнт] Q.strings [0].
[Rob B.] Так, q.strings.
Мы маглі альбо зрабіць і q.strings [0].
Гэта значна радзей, чым гэта.
Калі ён проста будзе 0, то вы будзеце схільныя бачыць q.strings.
Вось дзе мы капіяванні.
Колькі байт у нас засталося скапіяваць? >> [Студэнт] 10.
Права.
[Студэнт] Ці павінны мы памножым 5 - 10 разоў больш байта ці яшчэ што-небудзь?
Так, так гэта дзесьці, што менавіта мы капіявання?
[Студэнт] [неразборліва]
Які тып рэч, якую мы капіявання?
[Студэнт] [неразборліва]
Так, так што знак * ы, што мы капіявання, мы не ведаем, дзе тыя і адкуль.
Ну, дзе яны паказваюць на, як струны, мы ў канчатковым выніку націснуўшы на яе ў чаргу
або enqueuing на чарзе.
Дзе тыя, і адкуль, мы паняцця не маем.
Нам проста трэба сачыць за сімвал * з сябе.
Мы не хочам, каб скапіяваць памеру - начальнік байт.
Мы хочам, каб скапіяваць памеру - начальнік сімвал * з,
так што мы збіраемся памножыць гэта на SizeOf (Char *).
Тое ж самае тут, унізе, галава * SizeOf (Char *).
>> [Студэнт] А [неразборліва]?
Гэта прама тут?
[Студэнт] Не, ніжэй, памер - галава.
[Rob B.] Гэта прама тут?
Паказальнік арыфметыка.
Як арыфметыка паказальнікаў будзе працаваць гэта
ён аўтаматычна памнажаецца на памер тыпу, што мы маем справу з.
Гэтак жа, як тут, новая + (памер - галава)
дакладна адпавядае і новая [памер - начальнік]
пакуль мы не чакаем, што працуе правільна,
бо калі мы маем справу з Int масіва, то мы не робім індэкс INT-
або, калі гэта памер з 5, і вы хочаце 4-й элемент, то індэкс ў
Int масіва [4].
Вы не-[4] * памер Int.
, Які апрацоўвае яго аўтаматычна, і гэты выпадак
Літаральна эквівалентныя, таму кранштэйны сінтаксісу
толькі збіраецца быць ператвораны ў гэтым, як толькі вы кампіляцыі.
Гэта тое, што вы павінны быць асцярожныя, што
пры даданні памераў - галава
Вы дадаеце не адзін байт.
Вы дадаеце адзін знак *, які можа быць адным байт або любы іншы.
>> Іншыя пытанні?
Так, з чаргі будзе лягчэй.
Я дам вам хвіліну, каб рэалізаваць.
Так, і я мяркую, што гэта тая ж самая сітуацыя, дзе
што епдиеие выпадку, калі мы enqueuing нулявы,
Можа быць, мы хочам справіцца з гэтым, можа быць, мы не ведаем.
Мы не будзем рабіць гэта зноў тут, але гэтак жа, як наш стэк выпадку.
Калі паставіць у чаргу нулявыя, мы маглі бы на яго ўвагі.
Любы, ёсць некаторы код, я магу пацягнуць?
[Студэнт] Я проста з чаргі.
Версія 2 з'яўляецца тое, што, усё ў парадку.
Вы хочаце, каб растлумачыць?
[Студэнт] Па-першае, вы пераканаецеся, што ёсць нешта ў чарзе
і што памер паніжаецца на 1.
Вы павінны зрабіць гэта, а затым вярнуць яго галаву
а затым перамясціць галаву 1.
Такім чынам, ёсць куток выпадку мы павінны разгледзець. Так.
[Студэнт] Калі ваша галава знаходзіцца на апошнім элеменце,
то вы не хочаце галаву, каб паказаць межы масіва.
>> Так, так, як толькі галава тычыцца канцы нашага масіва,
Калі мы з чаргі, наша галава павінна быць мода на 0.
На жаль, мы не можам зрабіць гэта за адзін крок.
Я думаю, так, як я б, верагодна, выправіць гэта
гэта будзе сімвал *, тое, што мы вяртаемся,
Незалежна ад вашага імя зменнай хоча быць.
Затым мы хочам мода галавы нашых магчымасцяў
, А затым вярнуцца ў адстаўцы.
Многія людзі тут, яны маглі б зрабіць-
гэта выпадак-вы будзеце бачыць, як людзі рабіць, калі галава
больш ёмістасць, зрабіць галаву - ёмістасць.
І гэта толькі рабочая вакол таго, што мод.
Кіраўнік МО = ёмістасць нашмат чысцей
з обцяканьне, чым калі б галава больш, чым магутнасць галавой - ёмістасць.
>> Пытанні?
Добра, апошняя рэч, якую мы пакінулі наш звязанага спісу.
Вы маглі б быць выкарыстаны для некаторых з звязанага спісу паводзіны, калі вы зрабілі
звязаных спісаў у вашай хэш-табліцы, калі вы зрабілі хэш-табліцы.
Я настойліва рэкамендую рабіць хэш-табліцы.
Магчыма, вы ўжо зрабілі выглядзе дрэва,
але спрабуе цяжэй.
У тэорыі, яны асімптатычна лепш.
Але паглядзіце на вялікай дошцы,
і імкнецца ніколі не рабіць лепш, і яны займаюць больш памяці.
Усё аб спробе заканчвае тым, што яшчэ горш для дадатковай працы.
Гэта тое, што рашэнне David Malan заўсёды з'яўляецца
ён заўсёды свае паведамленні Trie рашэнне, і давайце паглядзім, дзе ён у цяперашні час.
Што ён пад зямлёй, David J?
Ён № 18, так што гэта не вельмі дрэнна,
і што гэта будзе адзін з лепшых спрабуе Вы можаце думаць
ці адна з лепшых спрабуе з Trie.
Гэта нават не яго арыгінальнае рашэнне?
Я адчуваю, як Trie рашэнні, як правіла, больш у гэтай галіне выкарыстання аператыўнай памяці.
>> Спусьцецеся на самы верх, і аператыўнай памяці знаходзіцца ў адной лічбы.
Спусьцецеся ўніз да ніжняй, а затым вы пачынаеце бачыць спрабуе
дзе вы атрымаеце абсалютна масіўнай аператыўнай памяці,
і спрабуе цяжэй.
Не зусім, але каштуе гэта адукацыйны вопыт, калі вы зрабілі адзін.
Апошняе, што наша звязанага спісу,
і гэтыя тры рэчы, стэкі, чэргі і звязаныя спісы,
любая будучая што можна зрабіць у вобласці кампутарных навук
Выкажам здагадку ў вас ёсць знаёмства з гэтымі рэчамі.
Яны проста такім фундаментальным да ўсяго.
>> Змяненні, спісы, і тут мы аднанакіраваныя спісу будзе наша рэалізацыя.
Што односвязный значыць, у адрозненне ад двусвязный? Так.
[Студэнт] Гэта толькі паказвае на наступны паказальнік, а не паказальнікаў,
як той перад ім і пасля яе.
Так, так і ў фармаце малюнка, што я толькі што зрабіў?
У мяне ёсць дзве рэчы. У мяне ёсць карціны і фатаграфіі.
У фармаце малюнка, нашы аднанакіраваныя спісу,
Безумоўна, у нас ёсць нейкі паказальнік на кіраўніка нашага спісу,
, А затым у наш спіс, мы проста паказальнікі,
і, магчыма, гэта паказвае на нуль.
Гэта будзе ваш тыповы малюнак аднанакіраваныя спісу.
Двойчы звязаны спіс, вы можаце пайсці ў зваротным кірунку.
Калі я дам вам любы вузел у спісе, то вы можаце заўсёды атрымаць у
любой іншай вузел у спіс, калі ён двойчы звязаны спіс.
Але калі я вам трэцюю вузла ў спісе, і гэта аднанакіраваныя спіс,
ніякім чынам не вы калі-небудзь, каб дабрацца да першага і другога вузлоў.
І ёсць пераваг і недахопаў, і адзін відавочны
гэта вы займаюць больш памерам, і вы павінны адсочваць, дзе гэтыя рэчы павінны быць звернутыя цяпер.
Але мы клапоцімся толькі пра односвязанны.
>> Некалькі рэчаў, якія мы збіраемся мець рэалізаваць.
Ваша ЬурейеЕ вузла структуры, Int I: Структура вузла * наступны; вузла.
Гэта ЬурейеЕ павінны быць спалены ў вашым розуме.
Віктарына 1 варта хацелі даць вызначэнне тыпу звязанага спісу вузлоў,
і вы павінны быць у стане неадкладна штабнаваць, што ўніз
нават не задумваючыся пра гэта.
Я думаю, пара пытанняў, чаму мы павінны пабудуем тут?
Чаму мы не можам сказаць вузла *?
[Студэнт] [неразборліва]
Так.
Адзінае, што вызначае вузел, як рэч
з'яўляецца ЬурейеЕ сябе.
Але на дадзены момант, калі мы накшталт разбору праз гэта вызначэнне вузла структуры,
Мы яшчэ не скончылі нашу ЬурейеЕ яшчэ, так што з ЬурейеЕ не скончана,
вузел не існуе.
Але структура вузла робіць, і гэты вузел сюды,
гэта таксама можна назваць што-небудзь яшчэ.
Гэта можна назваць з.
Гэта можна было б назваць звязаны спіс вузлоў.
Яго можна назваць што заўгодна.
Але гэтая структура вузел павінен быць названа ж самае, што гэтая структура вузла.
Што вы называеце гэта павінна быць тут,
і так, што таксама адказвае на другі кропцы пытанне
Менавіта таму-шмат разоў, калі вы бачыце структур і вызначэння тыпаў з структуры,
Вы ўбачыце, ананімныя структуры, дзе вы ўбачыце толькі ЬурейеЕ структуры,
рэалізацыя структуры, слоўнік, ці Што заўгодна.
>> Чаму тут мы павінны сказаць вузла?
Чаму яна не можа быць ананімнай структуры?
Гэта амаль той жа адказ.
[Студэнт] Вам трэба спасылацца на яго ў межах структуры.
Так, у межах структуры, неабходна звярнуцца да структуры самога.
Калі вы не даяце структуры імя, калі гэта ананімная структура, вы не можаце спасылацца на яго.
І апошняе, але не менш усе яны павінны быць некалькі прамалінейна,
і яны павінны дапамагчы вам зразумець, калі вы пішаце гэта ўніз
што вы робіце нешта няправільна, калі такога роду рэчы не маюць сэнсу.
Апошняе, але не менш важна, чаму гэта павінна быць структура вузла *?
Чаму гэта не можа быць проста будуем вузла далей?
[Студэнт] Паказальнік на наступную структуру.
Гэта непазбежна, што мы хочам.
Чаму б гэта ніколі не будзе структура вузла далей?
Чаму гэта павінна быць структура вузла * далей? Так.
[Студэнт] Гэта як бясконцы цыкл.
Так.
[Студэнт], што ўсё будзе ў адным.
Так, проста думаю пра тое, як мы будзем рабіць памеру ці чамусьці.
Памер структуры ў асноўным + або - некаторыя карціны тут ці там.
Гэта ў асноўным будзе сума памеры рэчаў у структуры.
Гэта прама тут, нічога не змяняючы, памер будзе лёгка.
Памер структуры вузла будзе памерам я + памер наступнага.
Памер мне будзе 4. Памер наступны будзе 4.
Памер структуры вузла будзе 8.
Калі мы не будзем мець *, думаючы пра SizeOf,
Затым SizeOf (I) будзе 4.
Памер структуры вузла наступны будзе памерам я + памер структуры вузла наступнага
+ Памер я + памер структуры вузла наступнага.
Было б бясконцай рэкурсіі вузлоў.
Вось чаму ўсё гэта так павінна быць.
>> Зноў жа, абавязкова запомніце, што,
або, па крайняй меры, зразумець, досыць таго, што вы можаце быць у стане
Прычынай праз тое, што яна павінна выглядаць.
Тое, што мы збіраемся хочам рэалізаваць.
Калі даўжыня спісу
Вы можаце падманваць і трымаць вакол
глабальныя даўжыні або нешта, але мы не збіраемся гэтага рабіць.
Мы збіраемся, каб падлічыць даўжыню спісу.
Мы змяшчаецца, так што гэта ў асноўным, як пошук,
таму ў нас ёсць звязаны спіс цэлых лікаў, каб убачыць, калі гэта лік знаходзіцца ў звязаным спісе.
Далучэнне будзе ўставіць у пачатку спісу.
Append збіраецца ўключыць у канцы.
Insert_sorted будзе ўставіць у спарадкаваныя пазіцыі ў спісе.
Insert_sorted выгляд мяркуе, што вы ніколі не выкарыстоўвалі пачатак ці канец у дрэнных адносінах.
>> Insert_sorted, калі вы рэалізуеце insert_sorted-
скажам, у нас ёсць звязаны спіс.
Гэта тое, што ў цяперашні час ён выглядае, 2, 4, 5.
Я хачу, каб ўставіць 3, так як пакуль сам спіс ужо адсартаваны,
лёгка знайсці, дзе 3 належыць.
Я пачынаю ў 2.
Добра, 3 больш, чым 2, таму я хачу, каб працягваць ісці.
Ах, 4 занадта вялікі, так што я ведаю 3 будзе ісці паміж 2 і 4,
і ў мяне ёсць, каб выправіць паказальнікі і ўсё такое.
Але калі мы не будзем выкарыстоўваць строга insert_sorted,
хацелася давайце проста скажам, я папярэднічаць 6,
Затым мой звязанага спісу стане гэтым.
У цяперашні час яна не мае ніякага сэнсу, таму для insert_sorted, можна толькі выказаць здагадку,
што спіс адсартаваны, хоць існуюць аперацыі
якія могуць прывесці да не быць адсартаваныя, вось і ўсё.
Знайсці карысным ўстаўка-так гэта тыя асноўныя рэчы, якія вы будзеце мець рэалізаваць.
>> Цяпер, знайдзіце хвілінку, каб зрабіць даўжыню і ўтрымоўвае,
і тыя павінны быць адносна хутка.
Набліжаецца час закрыцця, так што ў каго нічога даўжыню ці ўтрымоўвае?
Яны збіраюцца, каб быць амаль ідэнтычнымі.
[Студэнт] Даўжыня.
Давайце паглядзім, перагляд.
Добра.
Вы хочаце, каб растлумачыць?
[Студэнт] Я проста стварыць паказальнік вузлоў і ініцыялізаваць яго да першага, які з'яўляецца нашай глабальнай зменнай,
а потым праверыць, калі гэта нулявы, таму я не атрымліваю сегменце віна і вяртаць 0, калі гэта так.
У адваротным выпадку, я цыкле, адсочванне на працягу цэлага
Колькі разоў я звяртаўся да наступнага элемента спісу
і ў тым жа аперацыю прырашчэння таксама доступ да гэтай фактычнай элемент,
і тады я бесперапынна зрабіць праверку, каб убачыць, калі гэта NULL,
і калі ён нулявы, то ён перарывае і проста вяртае колькасць элементаў я даступны.
>> [Rob B.] Хто-небудзь ёсць якія-небудзь каментары на што-небудзь?
Гэта выглядае выдатна правільнасць мудра.
[Студэнт] Я не думаю, што вам трэба вузла == NULL.
Так, так што калі вузел == NULL 0 вяртанні.
Але калі вузел == NULL, то гэта-о-о, ёсць карэктнасці пытання.
Гэта было проста вы вярнуўшыся, я, але гэта не ўваходзіць у камплект прама цяпер.
Вам проста трэба Int я, так што я = 0.
Але калі вузел з'яўляецца нулявым, то я па-ранейшаму будзе 0,
і мы збіраемся вяртаць 0, так што гэты выпадак з'яўляецца аднолькавым.
Іншая распаўсюджаная рэч, каб захаваць дэкларацыю
вузлоў ўнутры цыклу.
Можна сказаць, што-о-о, няма.
Давайце трымаць гэта як гэта.
Я б, напэўна пакласці Int = 0 тут,
Затым вузел * = 1. Вузел тут.
І гэта, напэўна, як-пазбавіцца ад гэтага цяпер.
Гэта, напэўна, як бы я напісаў.
Акрамя таго, можна-гледзячы на ​​гэта, як гэта.
Гэты цыкл структура прама тут
павінна быць амаль гэтак жа натуральна для вас, як і для Int я = 0
Я менш, чым даўжыня масіва я + +.
Калі гэта, як вы ітэрацыі па масіве, гэта, як вы ітэрацыю па спісе.
>> Гэта павінна быць другой натурай ў некаторай кропцы.
Маючы гэта на ўвазе, гэта будзе амаль тое ж самае.
Вы збіраецеся хочаце перабраць звязанага спісу.
Калі вузел-я паняцця не маю, што велічыня называецца.
Я вузла.
Калі значэнне ў гэтым вузле = я вярнуся, праўда, і гэта ўсё.
Звярніце ўвагу, што толькі так мы калі-небудзь вярнуцца ілжывым
, Калі мы перабору ўсёй звязаны спіс і ніколі не вяртацца праўда,
так гэта тое, што яна робіць.
Як нататка боку, мы, верагодна, не атрымаеце, каб дадаць пачатку ці ў канцы.
>> Хуткі апошняй ноты.
Калі Вы бачыце статычную ключавых словах, так скажам статычнага колькасць Int = 0,
Затым мы робім фота + +, вы можаце ў асноўным думаюць пра яго як пра глабальнай зменнай,
хоць я толькі што сказаў, што гэта не так, як мы збіраемся рэалізаваць даўжыні.
Я раблю гэта тут, а потым разлічваць + +.
У любым выпадку, мы можам увайсці вузла ў нашым звязанага спісу мы павялічваючы наш рахунак.
Сутнасць гэтага з'яўляецца тое, што статычная ключавое слова значыць.
Калі б я толькі што соипЬ = 0, што будзе рэгулярна старых глабальных зменных.
Што статычнага Int колькасць сродкаў з'яўляецца тое, што глабальная пераменная за гэты файл.
Гэта немагчыма для некаторых іншых файлаў,
хацелася думаць пра PSET 5, калі вы пачалі.
Вы абодва speller.c, і ў вас ёсць dictionary.c,
і калі вы проста абвясціць глабальную рэч, то нічога ў speller.c
можна атрымаць у dictionary.c і наадварот.
Глабальныя зменныя даступныя любому. Файл з,
але статычныя зменныя даступныя толькі ўнутры самога файла,
так што ўнутры праверку арфаграфіі або ўнутры dictionary.c,
гэта накшталт як бы я заяўляю аб сваім зменнай для памеру маёй масіва
або памер майго колькасць слоў у слоўніку.
Так як я не хачу, каб абвясціць глабальную зменную, што хтосьці мае доступ,
Я сапраўды клапоцяцца толькі пра яго для маіх уласных мэтаў.
>> Добрая рэч аб гэтым таксама ўвесь матэрыял сутыкнення імя.
Калі некаторы іншы файл спрабуе выкарыстаць глабальную зменную з імем графа, усё ідзе вельмі, вельмі няправільна,
так што гэта добра трымае рэчы бяспечныя, і толькі вы можаце атрымаць да яго доступ,
і ніхто іншы не можа, і калі нехта заяўляе, глабальная пераменная называецца граф,
то ён не будзе ўмешвацца ў вашу статычнай зменнай кольк.
Гэта тое, што з'яўляецца статычным. Гэта файл глабальных зменных.
>> Пытанні пра што-небудзь?
Ўсё гатова. Пакуль.
[CS50.TV]