1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Sekcio 6] [Pli Vasta] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Universitato Harvard] 3 00:00:04,000 --> 00:00:09,000 [Jen CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Ni povas direkti al nia sekcio de demandoj. 5 00:00:11,000 --> 00:00:17,000 Mi sendis la adreson por la spaco antaŭe. 6 00:00:17,000 --> 00:00:22,000 La komenco de la sekcio de la demandoj diri- 7 00:00:22,000 --> 00:00:26,000 ŝajne mi ne estas tute unsick-estas tre facila demando 8 00:00:26,000 --> 00:00:28,000 de ĵus kio valgrind? 9 00:00:28,000 --> 00:00:30,000 Kion valgrind fari? 10 00:00:30,000 --> 00:00:34,000 Ĉiu volas diri kion valgrind faras? 11 00:00:34,000 --> 00:00:36,000 [Studenta] Jaques memoro likas. 12 00:00:36,000 --> 00:00:41,000 Yeah, valgrind estas ĝenerala memoro Kontrolilo. 13 00:00:41,000 --> 00:00:44,000 Ĝin, en la fino, informas vin se vi havas memoron fugoj, 14 00:00:44,000 --> 00:00:49,000 kiu estas plejparte kion ni uzas ĝin por ĉar se vi volas 15 00:00:49,000 --> 00:00:54,000 faru bone en la problemo aro aŭ se vi volas 16 00:00:54,000 --> 00:00:59,000 preni en la granda tabulo, vi bezonas havi neniun memoro filtras ajn, 17 00:00:59,000 --> 00:01:01,000 kaj en kazo vi havas memoron fugon ke vi ne povas trovi, 18 00:01:01,000 --> 00:01:04,000 Ankaŭ memoru, ke kiam vi malfermas dosieron 19 00:01:04,000 --> 00:01:07,000 kaj se vi ne fermi ĝin, tio estas memoro fugo. 20 00:01:07,000 --> 00:01:10,000 >> Multaj homoj serĉas iu nodo ke ili ne liberigante 21 00:01:10,000 --> 00:01:15,000 kiam vere, ili ne fermi la vortaro en la unua paŝo. 22 00:01:15,000 --> 00:01:19,000 Ĝi ankaŭ diras al vi se vi havas nevalidan legas aŭ skribas, 23 00:01:19,000 --> 00:01:22,000 kio signifas se vi provas kaj starigis valoro 24 00:01:22,000 --> 00:01:26,000 jen trans la fino de la amaso kaj ne okazas al seg kulpo 25 00:01:26,000 --> 00:01:30,000 sed valgrind kaptas ĝin, kiel vi devus ne vere povas skribi tie, 26 00:01:30,000 --> 00:01:33,000 kaj tiel vi certe ne havas iun el tiuj ankaŭ ne. 27 00:01:33,000 --> 00:01:38,000 Kiel vi uzas valgrind? 28 00:01:38,000 --> 00:01:42,000 Kiel vi uzas valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Estas ĝenerala demando de 30 00:01:45,000 --> 00:01:49,000 ia ruli ĝin kaj rigardi la eligo. 31 00:01:49,000 --> 00:01:51,000 La eligo estas aplastante multajn fojojn. 32 00:01:51,000 --> 00:01:54,000 Ekzistas ankaux amuza eraroj kie se vi havas iujn terure erara afero 33 00:01:54,000 --> 00:01:59,000 okazas en buklo, tiam ĝi estos eble diri, "Vojo tro multaj eraroj. 34 00:01:59,000 --> 00:02:03,000 Mi tuj ĉesos rakonti nun. " 35 00:02:03,000 --> 00:02:08,000 Estas esence tekstajn eligo ke vi devas analizi. 36 00:02:08,000 --> 00:02:13,000 En la fino, ĝi rakontos al vi memoro filtras kiun vi havas, 37 00:02:13,000 --> 00:02:16,000 kiom da blokoj, kiuj povas esti utila ĉar 38 00:02:16,000 --> 00:02:20,000 se estas unu bloko unfreed, tiam ĝi estas kutime pli facile trovi 39 00:02:20,000 --> 00:02:23,000 ol 1.000 blokoj unfreed. 40 00:02:23,000 --> 00:02:26,000 1.000 blokoj unfreed probable signifas ke vi ne liberigante 41 00:02:26,000 --> 00:02:30,000 vian ligitaj lertaj taŭge aŭ iu. 42 00:02:30,000 --> 00:02:32,000 Tio valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Nun ni havas nian sekcion de demandoj, 44 00:02:35,000 --> 00:02:38,000 kion vi ne bezonas elŝuti. 45 00:02:38,000 --> 00:02:41,000 Vi povas klaki sur mia nomo kaj eltiris ilin; en la spaco. 46 00:02:41,000 --> 00:02:44,000 Nun alklaku mi. 47 00:02:44,000 --> 00:02:46,000 Revizio 1 estos pilo, kiun ni faras unue. 48 00:02:46,000 --> 00:02:55,000 Redakto 2 estos vosto, kaj redaktoj 3 estos la sole ligitaj listo. 49 00:02:55,000 --> 00:02:58,000 Dividante per niaj pilo. 50 00:02:58,000 --> 00:03:02,000 Kiel ĝi diras ĉi tie, pilo estas unu el la plej baza, 51 00:03:02,000 --> 00:03:07,000 fundamenta datumstrukturoj de komputiko. 52 00:03:07,000 --> 00:03:11,000 La tre pratipa ekzemplo estas 53 00:03:11,000 --> 00:03:13,000 la pilo de pletoj en la manĝejo. 54 00:03:13,000 --> 00:03:16,000 Estas esence kiam ajn vi estas enkondukita al pilo, 55 00:03:16,000 --> 00:03:20,000 iu tuj diris, "Ho, kiel stako de pletoj." 56 00:03:20,000 --> 00:03:22,000 Vi pilo la pletoj supren. 57 00:03:22,000 --> 00:03:24,000 Tiam, kiam vi iros tiri pleton, 58 00:03:24,000 --> 00:03:31,000 la unua pleto ke tio getting tiris estas la lasta kiu estis metita sur la stako. 59 00:03:31,000 --> 00:03:34,000 La pilo ankaŭ simila diras tie- 60 00:03:34,000 --> 00:03:37,000 ni havas la segmento de memoro nomis la stako. 61 00:03:37,000 --> 00:03:40,000 Kaj kial ĝi nomis la pilo? 62 00:03:40,000 --> 00:03:42,000 >> Ĉar kiel stako datumstrukturo, 63 00:03:42,000 --> 00:03:46,000 ĝi pelas kaj Popoj pilo kadroj en la pilo, 64 00:03:46,000 --> 00:03:53,000 kie pilo kadroj estas kiel specifa alvoko de funkcio. 65 00:03:53,000 --> 00:03:57,000 Kaj kiel stako, vi ĉiam devas reveni 66 00:03:57,000 --> 00:04:03,000 de funkcio alvoko antaŭ ol vi povos akiri malsupren en suba pilo kadroj denove. 67 00:04:03,000 --> 00:04:08,000 Vi ne povas havi ĉefan alvoko foo alvoko stango kaj trinkejo reveno al ĉefa rekte. 68 00:04:08,000 --> 00:04:14,000 Oni ĉiam havas sekvi la ĝentilajn pilo pelante kaj krevi. 69 00:04:14,000 --> 00:04:18,000 La du operacioj, kiel mi diris, estas puŝo kaj popo. 70 00:04:18,000 --> 00:04:20,000 Tiuj estas universalaj terminoj. 71 00:04:20,000 --> 00:04:26,000 Vi devas scii puŝo kaj pop en terminoj de piloj ne gravas. 72 00:04:26,000 --> 00:04:28,000 Ni vidos vostoj estas speco de malsamaj. 73 00:04:28,000 --> 00:04:32,000 Fakte ne havas universalan terminon, sed puŝo kaj pop estas universala por piloj. 74 00:04:32,000 --> 00:04:34,000 Puŝo estas nur surmetis la stako. 75 00:04:34,000 --> 00:04:37,000 Popo estas demeti la stako. 76 00:04:37,000 --> 00:04:43,000 Kaj ni vidas tie ni havas niajn typedef struct pilo, 77 00:04:43,000 --> 00:04:46,000 do ni havos char ** kordoj. 78 00:04:46,000 --> 00:04:51,000 Ne atingas timigitaj de iu **. 79 00:04:51,000 --> 00:04:54,000 Tiu tuj finos esti tabelo de kordoj 80 00:04:54,000 --> 00:04:58,000 aŭ tabelo de punteros al gravuloj, kie 81 00:04:58,000 --> 00:05:00,000 punteros al karakteroj inklinas esti kordoj. 82 00:05:00,000 --> 00:05:05,000 Ĝi ne devas esti kordoj, sed ĉi tie, ili tuj estos kordoj. 83 00:05:05,000 --> 00:05:08,000 >> Ni havas aron da kordoj. 84 00:05:08,000 --> 00:05:14,000 Ni havas grandecon, kiu reprezentas kiom eroj estas nuntempe en la pilo, 85 00:05:14,000 --> 00:05:19,000 kaj tiam ni havas la kapablon, kiu estas kiel multaj eroj povas esti sur la stako. 86 00:05:19,000 --> 00:05:22,000 La kapablo devus dividi kiel io pli granda ol 1, 87 00:05:22,000 --> 00:05:27,000 sed la grandeco tuj dividi kiel 0. 88 00:05:27,000 --> 00:05:36,000 Nun, estas esence tri malsamaj manieroj vi povas pensi pri pilo. 89 00:05:36,000 --> 00:05:39,000 Nu, estas probable pli, sed la du ĉefaj vojoj estas 90 00:05:39,000 --> 00:05:43,000 vi povas apliki ĝin uzante tabelo, aŭ vi povas apliki ĝin uzante ligitaj listo. 91 00:05:43,000 --> 00:05:48,000 Ligitaj listoj ia bagatela por fari piloj de. 92 00:05:48,000 --> 00:05:51,000 Ĝi estas tre facile fari pilo uzante ligitaj lertaj, 93 00:05:51,000 --> 00:05:55,000 do cxi tie, ni tuj faros pilo uzante arrays, 94 00:05:55,000 --> 00:05:59,000 kaj tiam uzanta arrays, ekzistas ankaŭ du manieroj vi povas pensi pri ĝi. 95 00:05:59,000 --> 00:06:01,000 Antaŭe, kiam mi diris ni havas kapablon por la pilo, 96 00:06:01,000 --> 00:06:04,000 do ni povas persvadi ero sur la stako. 97 00:06:04,000 --> 00:06:09,000 >> La vojo povus okazi estas tiel frue kiel vi batis 10 elementoj, tiam vi faris. 98 00:06:09,000 --> 00:06:13,000 Vi eble scias, ke tie estas supera baro de 10 aĵoj en la mondo 99 00:06:13,000 --> 00:06:16,000 ke vi neniam havas pli ol 10 aĵoj en via pilo, 100 00:06:16,000 --> 00:06:20,000 en kiu kazo vi povas havi supera baro sur la grandeco de via pilo. 101 00:06:20,000 --> 00:06:23,000 Aŭ vi povus havi viajn stack esti nebarita, 102 00:06:23,000 --> 00:06:27,000 sed se vi faras tabelo, tio signifas ke ĉiu unuopa kiam vi batis 10 elementoj, 103 00:06:27,000 --> 00:06:29,000 tiam vi tuj devas kreski ĝis 20 eroj, kaj kiam vi batis 20 elementoj, 104 00:06:29,000 --> 00:06:33,000 vi tuj devos kreski vian tabelo al 30 eroj aŭ 40 eroj. 105 00:06:33,000 --> 00:06:37,000 Vi tuj bezonas pliigi la kapablon, kiu estas tio, kion ni faros ĉi tie. 106 00:06:37,000 --> 00:06:40,000 Ĉiu unuopa tempo ni atingos la maksimuman grandecon de nia stako, 107 00:06:40,000 --> 00:06:46,000 kiam ni puŝi ion alian, ni tuj bezonas pliigi la kapablon. 108 00:06:46,000 --> 00:06:50,000 Tie, ni puŝon deklarita kiel bool puŝo (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str estas la ĉeno kiu ni puŝas sur la pilo, 110 00:06:54,000 --> 00:06:58,000 kaj bool nur diras ĉu ni sukcesis aŭ malsukcesis. 111 00:06:58,000 --> 00:07:00,000 >> Kiel ni povas ne? 112 00:07:00,000 --> 00:07:04,000 Kio estas la sola cirkonstanco, ke vi povas pensi pri 113 00:07:04,000 --> 00:07:07,000 kie ni bezonus por reveni falsa? 114 00:07:07,000 --> 00:07:09,000 Yeah. 115 00:07:09,000 --> 00:07:12,000 [Studenta] Se estas plena kaj ni uzas barita efektivigo. 116 00:07:12,000 --> 00:07:17,000 Yeah, do kiel ni difinas-li respondis 117 00:07:17,000 --> 00:07:23,000 se ĝi estas plena kaj ni uzas barita efektivigo. 118 00:07:23,000 --> 00:07:26,000 Tiam ni definitive reveni falsaj. 119 00:07:26,000 --> 00:07:31,000 Tuj kiam ni batis 10 aĵoj en la tabelo, ni ne povas persvadi 11, do ni revenos falsaj. 120 00:07:31,000 --> 00:07:32,000 Kio se ĝi nebarita? Yeah. 121 00:07:32,000 --> 00:07:38,000 Se vi ne povas pligrandigi la tabelo por iu kialo. 122 00:07:38,000 --> 00:07:43,000 Yeah, do memoro estas limigita rimedo, 123 00:07:43,000 --> 00:07:51,000 kaj finfine, se ni plenumas pelante aĵoj sur la stako denove kaj denove, 124 00:07:51,000 --> 00:07:54,000 ni iras al provi kaj destini pli granda tabelo por persvadi 125 00:07:54,000 --> 00:07:59,000 la pli granda kapablo, kaj malloc aŭ kion ajn ni uzas tuj revenos falsaj. 126 00:07:59,000 --> 00:08:02,000 Nu, malloc revenos nula. 127 00:08:02,000 --> 00:08:05,000 >> Memoru, ĉiu sola fojo vi iam nomas malloc, vi devus kontroli por vidi se ĝi 128 00:08:05,000 --> 00:08:12,000 Revenas nula alie kiu estas praveco dedukto. 129 00:08:12,000 --> 00:08:17,000 Ĉar ni volas havi nebarita pilo, 130 00:08:17,000 --> 00:08:21,000 la sola kazo ni tuj estos reveni falsa estas, se ni provu 131 00:08:21,000 --> 00:08:26,000 pliigi la kapablon kaj malloc aŭ kion ajn revenas falsaj. 132 00:08:26,000 --> 00:08:30,000 Tiam popo prenas neniun argumenton, 133 00:08:30,000 --> 00:08:37,000 kaj denove la kordo, kiu estas sur la supro de la stako. 134 00:08:37,000 --> 00:08:41,000 Kion ajn estis plej laste puŝis sur la stako estas kion popo revenas, 135 00:08:41,000 --> 00:08:44,000 kaj ankaŭ forigas ĝin de la stako. 136 00:08:44,000 --> 00:08:50,000 Kaj rimarki ke ĝi revenas nula se estas nenio sur la stako. 137 00:08:50,000 --> 00:08:53,000 Estas ĉiam ebla, ke la pilo estas malplena. 138 00:08:53,000 --> 00:08:55,000 En Java, se vi uzas por tio, aŭ aliaj lingvoj, 139 00:08:55,000 --> 00:09:01,000 provante popo el malplena stako povus kaŭzi escepto aŭ iu. 140 00:09:01,000 --> 00:09:09,000 >> Sed en C, nula estas speco de granda parto de la kazoj kiel ni manipuli ĉi tiujn problemojn. 141 00:09:09,000 --> 00:09:13,000 Reveni nula estas kiel ni iras por signifi ke la pilo estis malplena. 142 00:09:13,000 --> 00:09:16,000 Ni provizis kodo kiu estos provi vian pilo de funcionalidad, 143 00:09:16,000 --> 00:09:19,000 apliki puŝi kaj popo. 144 00:09:19,000 --> 00:09:23,000 Tiu ne estos multe da kodo. 145 00:09:23,000 --> 00:09:40,000 Mi-fakte, antaŭ ol ni faras tion, aludo, aludo- 146 00:09:40,000 --> 00:09:44,000 se vi ne vidis ĝin, malloc ne estas la sola funkcio 147 00:09:44,000 --> 00:09:47,000 ke allocates memoro sur la havaĵon por vi. 148 00:09:47,000 --> 00:09:51,000 Ekzistas familio de alloc funkcioj. 149 00:09:51,000 --> 00:09:53,000 La unua estas malloc, kiu vi kutimi. 150 00:09:53,000 --> 00:09:56,000 Tiam ekzistas calloc, kiu faras la samon kiel malloc, 151 00:09:56,000 --> 00:09:59,000 sed ĝi nulo ĉio por vi. 152 00:09:59,000 --> 00:10:04,000 Se vi iam volis agordi cxion al nula post mallocing ion 153 00:10:04,000 --> 00:10:06,000 vi devus nur uzi calloc en la unua loko anstataŭ skribi 154 00:10:06,000 --> 00:10:09,000 a por buklo al nulo ekster la tutan blokon de memoro. 155 00:10:09,000 --> 00:10:15,000 >> Realloc estas kiel malloc kaj havas multajn specialajn kazojn, 156 00:10:15,000 --> 00:10:19,000 sed esence kio realloc faras estas 157 00:10:19,000 --> 00:10:24,000 prenas puntero kiu estis jam asignitaj. 158 00:10:24,000 --> 00:10:27,000 Realloc estas la funkcio vi volas esti fiksi tie. 159 00:10:27,000 --> 00:10:31,000 Ĝi portas puntero ke jam estis reveninta de malloc. 160 00:10:31,000 --> 00:10:35,000 Imagu ke vi petas de malloc puntero de 10 bajtoj. 161 00:10:35,000 --> 00:10:38,000 Tiam poste oni rimarkas vi volis 20 bitokoj, 162 00:10:38,000 --> 00:10:42,000 tiel vi nomas realloc sur tiu puntero kun 20 bitokoj, 163 00:10:42,000 --> 00:10:47,000 kaj realloc aŭtomate kopii super ĉion por vi. 164 00:10:47,000 --> 00:10:51,000 Se vi ĵus nomis malloc denove, kiel mi havas blokon de 10 bajtoj. 165 00:10:51,000 --> 00:10:53,000 Nun mi bezonas bloko de 20 bajtoj, 166 00:10:53,000 --> 00:10:58,000 do se mi malloc 20 bajtoj, do mi devas permane kopii super la 10 bitokoj de la unua horo 167 00:10:58,000 --> 00:11:01,000 en la dua afero kaj tiam senpaga la unuan aferon. 168 00:11:01,000 --> 00:11:04,000 Realloc manipulos, ke por vi. 169 00:11:04,000 --> 00:11:11,000 >> Rimarki la subskribo tuj estos dezerta *, 170 00:11:11,000 --> 00:11:15,000 kio estas ĝuste reveni puntero al la bloko de memoro, 171 00:11:15,000 --> 00:11:17,000 tiam void * ptr. 172 00:11:17,000 --> 00:11:22,000 Vi povas pensi void * kiel ĝenerala puntero. 173 00:11:22,000 --> 00:11:27,000 Ĝenerale, oni neniam pritrakti void *, 174 00:11:27,000 --> 00:11:30,000 sed malloc revenas al dezerta *, kaj tiam ĝi estas ĝuste uzata kiel 175 00:11:30,000 --> 00:11:34,000 ĉi tiu estas vere tuj estos char *. 176 00:11:34,000 --> 00:11:37,000 La antaŭa dezerta * kiu estis redonita de malloc 177 00:11:37,000 --> 00:11:41,000 nun tuj estos pasitaj al realloc, kaj tiam grandeco 178 00:11:41,000 --> 00:11:49,000 estas la nova numero de bajtoj vi volas atribui, do via nova kapablo. 179 00:11:49,000 --> 00:11:57,000 Mi donos al vi post kelkaj minutoj, kaj fari ĝin en nia spaco. 180 00:11:57,000 --> 00:12:02,000 Komencu kun redaktoj 1. 181 00:12:16,000 --> 00:12:21,000 Mi haltos vin post espereble pri sufiĉa tempo por apliki puŝo, 182 00:12:21,000 --> 00:12:24,000 kaj tiam Mi donos al vi alian rompon fari popo. 183 00:12:24,000 --> 00:12:27,000 Sed vere ne estas tiel multe kodo ajn. 184 00:12:27,000 --> 00:12:35,000 La plej kodo estas probable la ekspansio stuff, pligrandigante la kapablo. 185 00:12:35,000 --> 00:12:39,000 Konsentite, neniu premo esti tute farita, 186 00:12:39,000 --> 00:12:47,000 sed tiel longe kiel vi sentas kiel vi estas sur la ĝusta vojo, tio estas bona. 187 00:12:47,000 --> 00:12:53,000 >> Ĉu iu havas kodo sentas komfortaj kun mi tirante kolektis? 188 00:12:53,000 --> 00:12:59,000 Yeah, mi volas, sed ne iu havas kodon mi povas tiri supren? 189 00:12:59,000 --> 00:13:05,000 Konsentite, vi povas komenci, konservu ĝin, kion ajn ĝi estas? 190 00:13:05,000 --> 00:13:09,000 Mi ĉiam forgesas ke paŝo. 191 00:13:09,000 --> 00:13:15,000 Okay, rigardante puŝo, 192 00:13:15,000 --> 00:13:18,000 Kion ili volas klarigi vian kodon? 193 00:13:18,000 --> 00:13:24,000 [Studenta] Unue, mi pliigis la grandecon. 194 00:13:24,000 --> 00:13:28,000 Mi supozas eble mi devus havi tiun-ĉiuokaze, mi pliigis la grandecon, 195 00:13:28,000 --> 00:13:31,000 kaj mi vidas se estas malpli ol la kapablo. 196 00:13:31,000 --> 00:13:36,000 Kaj se ĝi estas malpli ol la kapablo, mi aldonas al la tabelo, ke ni jam havas. 197 00:13:36,000 --> 00:13:42,000 Kaj se ĝi ne estas, mi multipliki la kapablo per 2, 198 00:13:42,000 --> 00:13:50,000 kaj mi reallocate la kordoj tabelo al iu kun pli granda kapablo grandeco nun. 199 00:13:50,000 --> 00:13:55,000 Kaj poste se tio malsukcesas, mi diras al la uzanto kaj reveni falsa, 200 00:13:55,000 --> 00:14:04,000 kaj se ĝi estas bone, tiam mi metis la ŝnuron en la nova loko. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Ankaŭ rimarki, ke ni uzis belan bitlarĝa operatoro tie 202 00:14:07,000 --> 00:14:09,000 multipliki per 2. 203 00:14:09,000 --> 00:14:11,000 Memoru, maldekstra movo ĉiam tuj estos multiplikita per 2. 204 00:14:11,000 --> 00:14:15,000 Ĝuste ŝanĝo estas dividita per 2 tiom longe kiom vi memoras, ke tio signifas 205 00:14:15,000 --> 00:14:18,000 dividi per 2 kiel en entjera dividita per 2. 206 00:14:18,000 --> 00:14:20,000 Eble senpintigas 1 tie aŭ tie. 207 00:14:20,000 --> 00:14:26,000 Sed movo lasita de 1 estas ĉiam tuj estos multiplikita per 2, 208 00:14:26,000 --> 00:14:32,000 se vi ne superfluas la limojn de la entjero, kaj tiam ne estos. 209 00:14:32,000 --> 00:14:34,000 Al flanko komento. 210 00:14:34,000 --> 00:14:39,000 Mi ŝatas do-ĉi ne tuj ŝanĝas la kodigo iamaniere ajn, 211 00:14:39,000 --> 00:14:48,000 sed mi ŝatas fari ion kiel ĉi tio. 212 00:14:48,000 --> 00:14:51,000 Ĝi fakte tuj fari ĝin iomete pli longa. 213 00:15:04,000 --> 00:15:08,000 Eble ĉi tio ne estas la perfekta kazo montri tion, 214 00:15:08,000 --> 00:15:14,000 sed mi ŝatas segmento gxin en tiujn blokojn de- 215 00:15:14,000 --> 00:15:17,000 estas bone, se ĉi se okazas, tiam Mi faros ion, 216 00:15:17,000 --> 00:15:19,000 kaj tiam la funkcio estas farita. 217 00:15:19,000 --> 00:15:22,000 Mi ne bezonas do rulumu miaj okuloj tuta vojo malsupren la funkcio 218 00:15:22,000 --> 00:15:25,000 por vidi, kio okazas post la alia. 219 00:15:25,000 --> 00:15:27,000 Estas se ĉi se okazas, tiam mi simple reveni. 220 00:15:27,000 --> 00:15:30,000 Ĝi ankaŭ havas la belan aldonis profito de ĉio ekster tio 221 00:15:30,000 --> 00:15:33,000 nun ŝanĝis lasis unufoje. 222 00:15:33,000 --> 00:15:40,000 Mi ne plu bezonas-se vi iam proksime ridinde longajn liniojn, 223 00:15:40,000 --> 00:15:45,000 tiam tiuj 4 bajtoj povas helpi, kaj ankaŭ la pli maldekstra io estas, 224 00:15:45,000 --> 00:15:48,000 la malpli premita vi sentas se like-bone, mi devas memori 225 00:15:48,000 --> 00:15:53,000 Mi nuntempe en kiam buklo ene de alia ene de a por buklo. 226 00:15:53,000 --> 00:15:58,000 Ie ajn vi povas fari ĉi reveno tuj, mi specon de kiel. 227 00:15:58,000 --> 00:16:05,000 Estas tute laŭvola kaj ne atendita en ajna formo. 228 00:16:05,000 --> 00:16:12,000 >> [Studenta] Should ekzistos grandecon - en la fail kondiĉo? 229 00:16:12,000 --> 00:16:19,000 La fail kondiĉo tie ni ne realloc, do jes. 230 00:16:19,000 --> 00:16:22,000 Rimarku kiel en la fail kondiĉo, supozeble, 231 00:16:22,000 --> 00:16:26,000 krom se ni liberan stuff poste, ni ĉiam tuj malsukcesos 232 00:16:26,000 --> 00:16:29,000 negrave kiom da fojoj ni provos puŝi ion. 233 00:16:29,000 --> 00:16:32,000 Se ni observas puŝante, ni observu pliigante grandeco, 234 00:16:32,000 --> 00:16:36,000 kvankam ni ne meti ion sur la stako. 235 00:16:36,000 --> 00:16:39,000 Kutime ni ne pliigo de la grandeco ĝis 236 00:16:39,000 --> 00:16:43,000 post ni sukcese metis ĝin sur la stako. 237 00:16:43,000 --> 00:16:50,000 Ni devus fari tion, diru, ĉu tie kaj tie. 238 00:16:50,000 --> 00:16:56,000 Kaj tiam anstataŭ diri s.size ≤ kapablo, estas malpli ol kapablo, 239 00:16:56,000 --> 00:17:01,000 nur ĉar ni kopiis kie ĉiu estis. 240 00:17:01,000 --> 00:17:07,000 >> Kaj memoru, la sola loko, kiun ni povus reveni malvera 241 00:17:07,000 --> 00:17:14,000 estas tie, kie realloc revenis nula, 242 00:17:14,000 --> 00:17:19,000 kaj se vi hazarde memoras norma eraro, 243 00:17:19,000 --> 00:17:22,000 eble vi povus konsideri tiun kazon, kie vi volas presi norma eraro, 244 00:17:22,000 --> 00:17:26,000 tiel fprintf stderr anstataŭ ĝuste presi rekte al la normo eksteren. 245 00:17:26,000 --> 00:17:31,000 Denove, tio estas ne espero, sed se ĝi estas eraro, 246 00:17:31,000 --> 00:17:41,000 tajpi printf, tiam vi eble volas fari ĝin presi al norma eraro anstataŭ normo eksteren. 247 00:17:41,000 --> 00:17:44,000 >> Ĉiu havas nenion alian por noti? Jes. 248 00:17:44,000 --> 00:17:47,000 [Studenta] Ĉu vi povas iri super la [inaudible]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Jes, la reala binariness de ĝi aŭ nur kio estas? 250 00:17:55,000 --> 00:17:57,000 [Studenta] Do vi multipliku ĝin per 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Jes, esence. 252 00:17:59,000 --> 00:18:11,000 En duuma tero, ni ĉiam havas nia aro de ciferoj. 253 00:18:11,000 --> 00:18:22,000 Sxangxigxantaj ĉi maldekstra per 1 esence enmetas ĝin ĉi tie ĉe la dekstra flanko. 254 00:18:22,000 --> 00:18:25,000 Reen al tio, nur memori ke ĉio en duuma 255 00:18:25,000 --> 00:18:28,000 estas povo de 2, tiel ĉi reprezentas 2 al la 0, 256 00:18:28,000 --> 00:18:30,000 ĉi 2 al la 1, ĉi 2 al la 2. 257 00:18:30,000 --> 00:18:33,000 Per enmeto de 0 al la dekstra flanko nun, ni nur ŝanĝi ĉio finita. 258 00:18:33,000 --> 00:18:38,000 Kio iam estis 2 al la 0 nun 2 al la 1, estas 2 al la 2. 259 00:18:38,000 --> 00:18:41,000 La dekstra flanko, ke ni insertos 260 00:18:41,000 --> 00:18:44,000 estas nepre destinita por 0, 261 00:18:44,000 --> 00:18:46,000 kiu faras sencon. 262 00:18:46,000 --> 00:18:49,000 Se vi iam multipliki numeron per 2, ĝi ne iras por fini nepara, 263 00:18:49,000 --> 00:18:54,000 do la 2 al la 0 loko devus esti 0, 264 00:18:54,000 --> 00:18:59,000 kaj ĉi tiu estas kion mi duonon avertita pri antaŭe estas se vi hazarde ŝanĝi 265 00:18:59,000 --> 00:19:01,000 trans la nombro de bitoj en entjero, 266 00:19:01,000 --> 00:19:04,000 tiam ĉi 1 tuj finos pafante. 267 00:19:04,000 --> 00:19:10,000 Tio estas la sola zorgo se vi hazarde estos kontraktanta kun vere granda kapabloj. 268 00:19:10,000 --> 00:19:15,000 Sed je tiu punkto, tiam vi pritraktas aron da miliardoj da aĵoj, 269 00:19:15,000 --> 00:19:25,000 kiu eble ne havas en memoro ĉiuokaze. 270 00:19:25,000 --> 00:19:31,000 >> Nun ni povas alveni al popo, kiu estas eĉ pli facila. 271 00:19:31,000 --> 00:19:36,000 Vi povus fari ĝin kiel se vi hazarde popo tuta amaso, 272 00:19:36,000 --> 00:19:38,000 kaj nun vi estas en duono kapablo denove. 273 00:19:38,000 --> 00:19:42,000 Vi povus realloc encoger la kvanto de memoro vi havas, 274 00:19:42,000 --> 00:19:47,000 sed vi ne devas zorgi pri tio, do la sola realloc kazo tuj estos 275 00:19:47,000 --> 00:19:50,000 kreskanta memoro, neniam ŝrumpanta memoro, 276 00:19:50,000 --> 00:19:59,000 kion tuj faros popo super facila. 277 00:19:59,000 --> 00:20:02,000 Nun vostoj, kiu tuj estos kiel piloj, 278 00:20:02,000 --> 00:20:06,000 sed la ordo, kiun vi prenos aferojn renversas. 279 00:20:06,000 --> 00:20:10,000 La pratipa ekzemplo de vosto estas linio, 280 00:20:10,000 --> 00:20:12,000 do versxajne se vi estus anglo, mi dirus 281 00:20:12,000 --> 00:20:17,000 pratipa ekzemplo de vosto estas vico. 282 00:20:17,000 --> 00:20:22,000 Do kiel linio, se vi estas la unua persono en linio, 283 00:20:22,000 --> 00:20:24,000 vi atendas esti la unua persono el la linio. 284 00:20:24,000 --> 00:20:31,000 Se vi estas la lasta persono en linio, vi tuj estos la lasta persono utilita. 285 00:20:31,000 --> 00:20:35,000 Ni nomas tion FIFO mastro, dum pilo estis LIFO ŝablono. 286 00:20:35,000 --> 00:20:40,000 Tiuj vortoj estas bela universala. 287 00:20:40,000 --> 00:20:46,000 >> Kiel piloj kaj kontraste arrays, vostoj tipe ne permesas aliron al elementoj en la mezo. 288 00:20:46,000 --> 00:20:50,000 Ĉi tie, pilo, ni havas puŝo kaj popo. 289 00:20:50,000 --> 00:20:54,000 Tie, ni hazarde ilin vokis enqueue kaj dequeue. 290 00:20:54,000 --> 00:20:58,000 Mi ankaŭ aŭdis ilin nomis movo kaj unshift. 291 00:20:58,000 --> 00:21:02,000 Mi aŭdis homojn diri puŝo kaj pop ankaŭ aplikas al vostoj. 292 00:21:02,000 --> 00:21:05,000 Mi aŭdis enigi, demeti, 293 00:21:05,000 --> 00:21:11,000 tiel puŝi kaj popo, se vi parolas pri piloj, vi puŝas kaj krevi. 294 00:21:11,000 --> 00:21:16,000 Se vi parolas pri vostoj, vi povus preni la vortoj vi volas uzi 295 00:21:16,000 --> 00:21:23,000 por inserción kaj forigo, kaj ne ekzistas konsento sur kio ĝi devus nomi. 296 00:21:23,000 --> 00:21:27,000 Sed cxi tie, ni havas enqueue kaj dequeue. 297 00:21:27,000 --> 00:21:37,000 Nun, la struct aspektas preskaŭ identa al la pilo struct. 298 00:21:37,000 --> 00:21:40,000 Sed ni devas konservi trako de kapo. 299 00:21:40,000 --> 00:21:44,000 Mi supozas diras cxi tie, sed kial ni bezonas la kapo? 300 00:21:53,000 --> 00:21:57,000 La prototipoj estas esence identa al puŝi kaj popo. 301 00:21:57,000 --> 00:21:59,000 Vi povas pensi pri tio kiel puŝo kaj popo. 302 00:21:59,000 --> 00:22:08,000 La sola diferenco estas popo revenas-anstataŭ la lasta, ĝi estas redonante la unua. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, aŭ io. 304 00:22:12,000 --> 00:22:14,000 Kaj jen la komenco. 305 00:22:14,000 --> 00:22:17,000 Nia vosto estas tute plena, do tie estas kvar elementoj en ĝi. 306 00:22:17,000 --> 00:22:21,000 La fino de nia vosto estas nuntempe 2, 307 00:22:21,000 --> 00:22:24,000 kaj nun ni iru por enmeti ion alian. 308 00:22:24,000 --> 00:22:29,000 >> Kiam ni volas enmeti ke ion alian, kion ni faris por la pilo versio 309 00:22:29,000 --> 00:22:36,000 estas ni etendis nian bloko de memoro. 310 00:22:36,000 --> 00:22:40,000 Kio estas la problemo pri tio? 311 00:22:40,000 --> 00:22:45,000 [Studenta] Vi movas la 2. 312 00:22:45,000 --> 00:22:51,000 Kion mi diris antaŭe pri la fino de la vosto, 313 00:22:51,000 --> 00:22:57,000 ĉi tio ne havas sencon, ke ni komencu je 1, 314 00:22:57,000 --> 00:23:01,000 tiam ni volas dequeue 1, tiam dequeue 3, tiam dequeue 4, 315 00:23:01,000 --> 00:23:05,000 tiam dequeue 2, tiam dequeue ĉi tiu. 316 00:23:05,000 --> 00:23:08,000 Ni ne povas uzi realloc nun, 317 00:23:08,000 --> 00:23:11,000 aŭ almenaŭ, vi devas uzi realloc en malsama maniero. 318 00:23:11,000 --> 00:23:15,000 Sed vi probable ne devus nur uzi realloc. 319 00:23:15,000 --> 00:23:18,000 Vi tuj devos permane kopii vian memoron. 320 00:23:18,000 --> 00:23:21,000 >> Estas du funkcioj kopii memoro. 321 00:23:21,000 --> 00:23:25,000 Estas memcopy kaj memmove. 322 00:23:25,000 --> 00:23:29,000 Mi nuntempe legas la viro paĝoj vidi kiuj vi tuj volas uzi. 323 00:23:29,000 --> 00:23:35,000 Konsentite, memcopy, la diferenco estas 324 00:23:35,000 --> 00:23:38,000 ke memcopy kaj memmove, unu manipulas la kazo ĝuste 325 00:23:38,000 --> 00:23:41,000 kie vi kopiado en regiono kiu okazas por koincidigi la regiono 326 00:23:41,000 --> 00:23:46,000 vi kopiado de. 327 00:23:46,000 --> 00:23:50,000 Memcopy ne manipulas ĝin. Memmove faras. 328 00:23:50,000 --> 00:23:59,000 Vi povas pensi pri la problemo kiel- 329 00:23:59,000 --> 00:24:09,000 diru mi volas kopii ĉi ulo, 330 00:24:09,000 --> 00:24:13,000 ĉi tiuj kvar al ĉi ulo super. 331 00:24:13,000 --> 00:24:16,000 En la fino, kion la tabelo devas rigardi kiel 332 00:24:16,000 --> 00:24:26,000 post la kopio estas 2, 1, 2, 1, 3, 4, kaj tiam iuj frandajxojn cxe la fino. 333 00:24:26,000 --> 00:24:29,000 Sed ĉi tiu estas dependa de la ordo en kiu ni vere kopii, 334 00:24:29,000 --> 00:24:32,000 ĉar se ni ne konsideras la fakton ke la regiono ni kopiado en 335 00:24:32,000 --> 00:24:35,000 parte kovras unu ni kopiado de, 336 00:24:35,000 --> 00:24:46,000 tiam ni povus fari kiel komenco tie, kopii la 2 en la loko kiun ni volas iri, 337 00:24:46,000 --> 00:24:52,000 tiam movi niajn punteros antaŭen. 338 00:24:52,000 --> 00:24:56,000 >> Nun ni tuj estos tie kaj tie, kaj nun ni deziras kopii 339 00:24:56,000 --> 00:25:04,000 ĉi ulo super ĉi ulo kaj movi niajn punteros antaŭen. 340 00:25:04,000 --> 00:25:07,000 Kion ni tuj finos atingi estas 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 anstataŭ la taŭga 2, 1, 2, 1, 3, 4 ĉar 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode la originala 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove manipulas ke ĝuste. 344 00:25:19,000 --> 00:25:23,000 En ĉi tiu kazo, esence nur ĉiam uzi memmove 345 00:25:23,000 --> 00:25:26,000 ĉar ĝi manipulas ĝin ĝuste. 346 00:25:26,000 --> 00:25:29,000 Ĝi ĝenerale ne plenumi ian ajn malbona. 347 00:25:29,000 --> 00:25:32,000 La ideo estas anstataŭ ekde la komenco kaj kopii ĉi vojo 348 00:25:32,000 --> 00:25:35,000 kiel ni ĵus faris ĉi tie, ĝi komenciĝas de la fino kaj kopias en, 349 00:25:35,000 --> 00:25:38,000 kaj en tiu kazo, vi neniam povas havi problemon. 350 00:25:38,000 --> 00:25:40,000 Tie estas neniu agado perdita. 351 00:25:40,000 --> 00:25:47,000 Ĉiam uzi memmove. Neniam zorgu pri memcopy. 352 00:25:47,000 --> 00:25:51,000 Kaj tie estas kie vi tuj devas aparte memmove 353 00:25:51,000 --> 00:26:01,000 la envolvis-ĉirkaŭ parton de via vico. 354 00:26:01,000 --> 00:26:04,000 No worries se ne tute farita. 355 00:26:04,000 --> 00:26:10,000 Ĉi tio estas pli malfacila ol pilo, puŝo, kaj popo. 356 00:26:10,000 --> 00:26:15,000 >> Iu havas kodon ni povus labori kun? 357 00:26:15,000 --> 00:26:21,000 Eĉ se tute nekompleta? 358 00:26:21,000 --> 00:26:23,000 [Studenta] Jes, ĝi estas tute nekompleta, though. 359 00:26:23,000 --> 00:26:27,000 Tute nekompleta estas fajna tiel longe kiel ni-povas vin savi la revizio? 360 00:26:27,000 --> 00:26:32,000 Mi forgesas ke ĉiu unuopa tempo. 361 00:26:32,000 --> 00:26:39,000 Konsentite, ignorante kio okazas kiam ni bezonas regrandigi aĵoj. 362 00:26:39,000 --> 00:26:42,000 Tute ignori Regrandigi. 363 00:26:42,000 --> 00:26:49,000 Klarigu tiun kodon. 364 00:26:49,000 --> 00:26:54,000 Mi kontrolas unue se la amplekso estas malpli ol la kopio unue 365 00:26:54,000 --> 00:27:01,000 kaj post tio, mi enmetas-Mi prenas kapo + grandeco, 366 00:27:01,000 --> 00:27:05,000 kaj mi certigas ĝin envolvas ĉirkaŭ la kapablo de la tabelo, 367 00:27:05,000 --> 00:27:08,000 kaj mi enŝovu la novan ĉenon en tiu pozicio. 368 00:27:08,000 --> 00:27:12,000 Tiam mi pliigi la grandeco kaj reveni vera. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] This is definitive unu el tiuj kazoj kie vi tuj volas esti uzante mod. 370 00:27:22,000 --> 00:27:25,000 Ajna speco de kazo kie vi kroĉas ĉirkaŭe, se vi pensas envolviendo ĉirkaŭe, 371 00:27:25,000 --> 00:27:29,000 la tuja penso devus esti mod. 372 00:27:29,000 --> 00:27:36,000 Kiel rapida optimumigo / faros vian kodo unu linio pli mallonga, 373 00:27:36,000 --> 00:27:42,000 vi rimarkos ke la linio tuj post ĉi tiu 374 00:27:42,000 --> 00:27:53,000 estas nur grandecon + +, do vi kunfandi ke en tiu linio, grandeco + +. 375 00:27:53,000 --> 00:27:58,000 Nun cxi tie, ni havas la kazon 376 00:27:58,000 --> 00:28:01,000 kie ni ne havas sufiĉan memoron, 377 00:28:01,000 --> 00:28:05,000 do ni pliigas nian kapablon por 2. 378 00:28:05,000 --> 00:28:09,000 Mi supozas ke vi povus havi la saman problemon tie, sed ni povas ignori ĝin nun, 379 00:28:09,000 --> 00:28:13,000 kie se vi fiaskis pliigi vian kapablon, 380 00:28:13,000 --> 00:28:18,000 tiam vi tuj volas malpliigi vian kapablon per 2 denove. 381 00:28:18,000 --> 00:28:24,000 Alia mallonga noto estas kiel vi povas fari + =, 382 00:28:24,000 --> 00:28:30,000 vi povas ankaŭ fari << =. 383 00:28:30,000 --> 00:28:43,000 Preskaŭ ĉio povas iri antaux egalas, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * nova estas nia nova bloko de memoro. 385 00:28:52,000 --> 00:28:55,000 Ho, super tie. 386 00:28:55,000 --> 00:29:02,000 >> Kion homoj pensas pri la tipo de nia nova bloko de memoro? 387 00:29:02,000 --> 00:29:06,000 [Studenta] Ĝi devus esti char **. 388 00:29:06,000 --> 00:29:12,000 Pensante reen al nia struct tien, 389 00:29:12,000 --> 00:29:14,000 kordoj estas kion ni reallocating. 390 00:29:14,000 --> 00:29:21,000 Ni faras tutan novan dinamika stokado por la elementoj en la vico. 391 00:29:21,000 --> 00:29:25,000 Kion ni tuj estos atribui al viaj kordoj estas kion ni mallocing ĝuste nun, 392 00:29:25,000 --> 00:29:30,000 kaj tiel nova tuj esti char **. 393 00:29:30,000 --> 00:29:34,000 Ĝi tuj estos tabelo de kordoj. 394 00:29:34,000 --> 00:29:38,000 Tiam kio estas la kazo, sub kiu ni tuj revenos falsa? 395 00:29:38,000 --> 00:29:41,000 [Studenta] Ĉu eblas fari la char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Jes, bona alvokon. 397 00:29:44,000 --> 00:29:46,000 [Studenta] Kio estis tio? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Ni volis fari grandeco de char * ĉar ni jam ne estas- 399 00:29:49,000 --> 00:29:53,000 tio efektive estus tre granda problemo ĉar sizeof (char) devus esti 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * tuj estos 4, 401 00:29:55,000 --> 00:29:58,000 tiom multe da fojoj kiam vi pritraktas ints, 402 00:29:58,000 --> 00:30:01,000 vi emas foriri per ĝi ĉar grandeco de int kaj grandeco de int * 403 00:30:01,000 --> 00:30:04,000 sur 32-bita sistemo tuj estos la sama afero. 404 00:30:04,000 --> 00:30:09,000 Sed ĉi tie, sizeof (char) kaj sizeof (char *) nun tuj estos la sama afero. 405 00:30:09,000 --> 00:30:15,000 >> Kio estas la cirkonstanco kie ni revenos falsa? 406 00:30:15,000 --> 00:30:17,000 [Studenta] Novaj estas nula. 407 00:30:17,000 --> 00:30:23,000 Yeah, se novaj estas nula, ni revenas falsa, 408 00:30:23,000 --> 00:30:34,000 kaj mi tuj ĵetu malsupren tie- 409 00:30:34,000 --> 00:30:37,000 [Studenta] [inaudible] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Jes, tio estas fajna. 411 00:30:39,000 --> 00:30:46,000 Vi povus ĉu do 2 fojoj kapablo aŭ kapablo shift 1 kaj tiam nur starigis gxin tie aŭ kion ajn. 412 00:30:46,000 --> 00:30:52,000 Ni tion faros kiel ni havis ĝin. 413 00:30:52,000 --> 00:30:56,000 Kapablo >> = 1. 414 00:30:56,000 --> 00:31:08,000 Kaj vi neniam iras al devas maltrankviligi perdi la 1-oj lokon 415 00:31:08,000 --> 00:31:12,000 ĉar vi forlasis moviĝis per 1, do la 1-oj loko estas nepre a 0, 416 00:31:12,000 --> 00:31:16,000 so right movo per 1, vi ankoraŭ tuj estos bone. 417 00:31:16,000 --> 00:31:19,000 [Studenta] Do vi bezonas tion antaux reveno? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Jes, tio faras absolute neniu senco. 419 00:31:29,000 --> 00:31:36,000 >> Nun supozu nin tuj finos reveni fidela al la fino. 420 00:31:36,000 --> 00:31:39,000 La vojo ni faros tiujn memmoves, 421 00:31:39,000 --> 00:31:45,000 ni bezonas esti zorgema kun ni kiel fari ilin. 422 00:31:45,000 --> 00:31:50,000 Ĉu iu havas sugestojn por kiel ni faras ili? 423 00:32:17,000 --> 00:32:21,000 Jen nia komenco. 424 00:32:21,000 --> 00:32:28,000 Neeviteble, ni volas komenci komence denove 425 00:32:28,000 --> 00:32:35,000 kaj kopio aĵojn en el tie, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Kiel vi faris tion? 427 00:32:41,000 --> 00:32:52,000 Unue, mi devas rigardi la viron paĝo memmove denove. 428 00:32:52,000 --> 00:32:57,000 Memmove, ordono de argumentoj estas ĉiam grava. 429 00:32:57,000 --> 00:33:01,000 Ni volas nian destinon unua, fonto dua, grandeco tria. 430 00:33:01,000 --> 00:33:06,000 Ekzistas multaj funkcioj kiu inversigi fonto kaj celo. 431 00:33:06,000 --> 00:33:11,000 Destino, fonto inklinas esti konsekvenca tiel. 432 00:33:17,000 --> 00:33:21,000 Movado, kio ĝin reveni? 433 00:33:21,000 --> 00:33:27,000 Ĝi redonas puntero al destino, ial ajn vi eble volas tion. 434 00:33:27,000 --> 00:33:32,000 Mi povas bildon legis ĝin, sed ni volas movi al nia celo. 435 00:33:32,000 --> 00:33:35,000 >> Kio estas nia destino tuj estos? 436 00:33:35,000 --> 00:33:37,000 [Studenta] Novaj. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Jes, kaj kien ni kopiado el? 438 00:33:39,000 --> 00:33:43,000 La unua afero kiun ni kopiado estas ĉi 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Kio estas la-ĉi 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Kio estas la adreso de ĉi 1? 441 00:33:55,000 --> 00:33:58,000 Kio estas la adreso de tiu 1? 442 00:33:58,000 --> 00:34:01,000 [Studenta] [inaudible] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Kapo + la adreso de la unua ero. 444 00:34:03,000 --> 00:34:05,000 Kiel ni preni la unua elemento en la tabelo? 445 00:34:05,000 --> 00:34:10,000 [Studenta] Queue. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Jes, q.strings. 447 00:34:15,000 --> 00:34:20,000 Memoru, tie, nia kapo estas 1. 448 00:34:20,000 --> 00:34:24,000 Darn ĝin. Mi nur pensas, ke estas magie- 449 00:34:24,000 --> 00:34:29,000 Jen, nia kapo estas 1. Mi tuj ŝanĝos mian koloron tro. 450 00:34:29,000 --> 00:34:36,000 Kaj jen kordoj. 451 00:34:36,000 --> 00:34:41,000 Ĉi tio, ni povas aŭ skribi ĝin kiel ni faris ĉi tie 452 00:34:41,000 --> 00:34:43,000 kun kapoj + q.strings. 453 00:34:43,000 --> 00:34:51,000 Multaj homoj ankaŭ skribi ĝin & q.strings [kapo]. 454 00:34:51,000 --> 00:34:55,000 Tio ne estas vere neniu malpli efika. 455 00:34:55,000 --> 00:34:58,000 Vi eble pensas pri ĝi kiel vi dereferencing ĝin kaj tiam ricevas la adreson de, 456 00:34:58,000 --> 00:35:04,000 sed la tradukilo tuj traduki ĝin al kion ni havis antaŭ ĉiuokaze, q.strings + kapo. 457 00:35:04,000 --> 00:35:06,000 Either way vi volas pensi pri ĝi. 458 00:35:06,000 --> 00:35:11,000 >> Kaj kiom da bitokoj ni deziras kopii? 459 00:35:11,000 --> 00:35:15,000 [Studenta] Kapablo - kapo. 460 00:35:15,000 --> 00:35:18,000 Kapablo - kapo. 461 00:35:18,000 --> 00:35:21,000 Kaj tiam vi povus skribi ĉiam ekster ekzemplo 462 00:35:21,000 --> 00:35:23,000 deĉifri ĉu tio estas prava. 463 00:35:23,000 --> 00:35:26,000 [Studenta] Bezonas esti dividita per 2 tiam. 464 00:35:26,000 --> 00:35:30,000 Yeah, do mi supozas ke ni povus uzi grandeco. 465 00:35:30,000 --> 00:35:35,000 Ni ankoraŭ havas grandecon esti- 466 00:35:35,000 --> 00:35:39,000 uzante grandeco, ni havas grandecon egalan al 4. 467 00:35:39,000 --> 00:35:42,000 Nia grandeco estas 4. Nia estro estas 1. 468 00:35:42,000 --> 00:35:46,000 Ni volas kopii tiuj 3 elementojn. 469 00:35:46,000 --> 00:35:54,000 Tio estas la prudenton kontrolu ke grandeco - kapo estas korekte 3. 470 00:35:54,000 --> 00:35:58,000 Kaj revenante tie, kiel ni diris antaŭe, 471 00:35:58,000 --> 00:36:00,000 se ni uzas kapablo, tiam ni devus dividi per 2 472 00:36:00,000 --> 00:36:04,000 ĉar ni jam kreskinta nia kapablo, do anstataŭe, ni tuj uzos grandeco. 473 00:36:11,000 --> 00:36:13,000 Ke kopioj tiu porcio. 474 00:36:13,000 --> 00:36:18,000 Nun, ni devas kopii la alia parto, la porcio, kiu restis el la komenco. 475 00:36:18,000 --> 00:36:28,000 >> Tio tuj memmove en kio pozicio? 476 00:36:28,000 --> 00:36:32,000 [Studenta] Plus grandeco - kapo. 477 00:36:32,000 --> 00:36:38,000 Jes, do ni jam kopiis en grandeco - kapo bajtoj, 478 00:36:38,000 --> 00:36:43,000 kaj tiel, kie ni volas kopii la ceteraj bitokoj estas nova 479 00:36:43,000 --> 00:36:48,000 kaj tiam grandeco minus-bone, la nombro de bitokoj ni jam kopiis in 480 00:36:48,000 --> 00:36:52,000 Kaj poste kien ni kopiado el? 481 00:36:52,000 --> 00:36:54,000 [Studenta] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Jes, q.strings. 483 00:36:56,000 --> 00:37:02,000 Ni povis ĉu fari & q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Ĉi tiu estas signife malpli komuna ol ĉi tiu. 485 00:37:05,000 --> 00:37:14,000 Se ĝi estas ĵus tuj esti 0, tiam vi emas vidi q.strings. 486 00:37:14,000 --> 00:37:16,000 Tie estas kie ni kopiado de. 487 00:37:16,000 --> 00:37:18,000 Kiom da bajtoj do ni forlasis kopii? >> [Studenta] 10. 488 00:37:18,000 --> 00:37:20,000 Ĝuste. 489 00:37:20,000 --> 00:37:25,000 [Studenta] Do ni devas multipliki 5 - 10 fojoj la grandeco de la bajtoj aŭ ion? 490 00:37:25,000 --> 00:37:30,000 Yeah, do ĉi tiu estas kie-kio ekzakte ni kopiado? 491 00:37:30,000 --> 00:37:32,000 [Studenta] [inaudible] 492 00:37:32,000 --> 00:37:34,000 Kio estas la tipo de la aĵo ni kopiado? 493 00:37:34,000 --> 00:37:36,000 [Studenta] [inaudible] 494 00:37:36,000 --> 00:37:41,000 Yeah, do la char * s, ke ni kopias, ni ne scias kie tiuj venas de. 495 00:37:41,000 --> 00:37:47,000 Nu, kie ili estas montrante, kiel la kordojn, ni finos puŝante ĝin sur la vosto 496 00:37:47,000 --> 00:37:49,000 aŭ enqueuing sur la vosto. 497 00:37:49,000 --> 00:37:51,000 Kie tiuj venas de, ni ne havas ideon. 498 00:37:51,000 --> 00:37:56,000 Ni nur bezonas kontroli kiu faras la char * s mem. 499 00:37:56,000 --> 00:38:00,000 Ni ne volas kopii grandeco - kapo bajtoj. 500 00:38:00,000 --> 00:38:03,000 Ni volas kopii grandeco - kapo char * s, 501 00:38:03,000 --> 00:38:11,000 do ni tuj multipliki ĉi tiu per sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Sama cxi tie, estro * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Studenta] Kio pri [inaudible]? 504 00:38:24,000 --> 00:38:26,000 Tiu rajto tie? 505 00:38:26,000 --> 00:38:28,000 [Studenta] Ne, sube la grandeco - kapo. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Ĉi tie ĉi? 507 00:38:30,000 --> 00:38:32,000 Pointer aritmetiko. 508 00:38:32,000 --> 00:38:35,000 Kiel puntero aritmetiko tuj labori estas 509 00:38:35,000 --> 00:38:40,000 ĝi aŭtomate multiplikas per la grandeco de la tipo kiu ni pritraktas. 510 00:38:40,000 --> 00:38:46,000 Ĝuste kiel ĉi tie, nova + (grandeco - kapo) 511 00:38:46,000 --> 00:38:56,000 Estas ekzakte ekvivalenta al & nova [size - kapo] 512 00:38:56,000 --> 00:39:00,000 gxis ni atendas ke por funkcii ĝuste, 513 00:39:00,000 --> 00:39:04,000 ĉar se ni pritraktas la int tabelo, tiam ni ne indekso de int- 514 00:39:04,000 --> 00:39:07,000 aŭ se ĝi estas de amplekso de 5 kaj vi volas la 4a ero, tiam ni indekson en la 515 00:39:07,000 --> 00:39:10,000 int tabelo [4]. 516 00:39:10,000 --> 00:39:14,000 Vi ne batu-[4] * grandeco de int. 517 00:39:14,000 --> 00:39:21,000 Kiu manipulas ĝin aŭtomate, kaj ĉi tiu kazo 518 00:39:21,000 --> 00:39:29,000 estas laŭvorte ekvivalenta, do la krampo sintakso 519 00:39:29,000 --> 00:39:34,000 Estas ĝuste tuj estos konvertita al ĉi tiel frue kiel vi kompili. 520 00:39:34,000 --> 00:39:38,000 Tio estas io, kion vi bezonas atenti de tiu 521 00:39:38,000 --> 00:39:42,000 kiam vi aldonas grandeco - kapo 522 00:39:42,000 --> 00:39:45,000 vi aldonante ne unu bajto. 523 00:39:45,000 --> 00:39:53,000 Vi aldonante char *, kio povas esti unu bitokoj aŭ kion ajn. 524 00:39:53,000 --> 00:39:56,000 >> Aliaj demandoj? 525 00:39:56,000 --> 00:40:04,000 Konsentite, dequeue tuj estos pli facila. 526 00:40:04,000 --> 00:40:11,000 Mi donos al vi unu minuto apliki. 527 00:40:11,000 --> 00:40:18,000 Ho, kaj mi supozas ĉi tiu estas la sama situacio kie 528 00:40:18,000 --> 00:40:21,000 kion la enqueue kazo, se ni enqueuing nula, 529 00:40:21,000 --> 00:40:24,000 eble ni volas manipuli ĝin, eble ni ne havas. 530 00:40:24,000 --> 00:40:27,000 Ni ne faros ĝin denove ĉi tie, sed sama kiel nia stako kazo. 531 00:40:27,000 --> 00:40:34,000 Se ni enqueue nula, oni eble volas ignori ĝin. 532 00:40:34,000 --> 00:40:40,000 Ĉiu havas iom da kodo mi povas tiri supren? 533 00:40:40,000 --> 00:40:45,000 [Studenta] Mi nur devas dequeue. 534 00:40:45,000 --> 00:40:56,000 Versio 2 estas tiu-okay. 535 00:40:56,000 --> 00:40:59,000 Vi volas klarigi? 536 00:40:59,000 --> 00:41:01,000 [Studenta] Unue, vi certigi ke estas io en la vosto 537 00:41:01,000 --> 00:41:07,000 kaj kiu la grandeco estas subiro per 1. 538 00:41:07,000 --> 00:41:11,000 Vi devas fari tion, kaj tiam vi revenos al la kapo 539 00:41:11,000 --> 00:41:13,000 kaj poste movi la kapon 1. 540 00:41:13,000 --> 00:41:19,000 Konsentite, do estas angulo kazo ni devas konsideri. Yeah. 541 00:41:19,000 --> 00:41:24,000 [Studenta] Se via kapo estas en la lasta elemento, 542 00:41:24,000 --> 00:41:26,000 tiam vi ne volas kapon al punkto ekster de la tabelo. 543 00:41:26,000 --> 00:41:29,000 >> Yeah, do tiel frue kiel kapo batas la fino de nia tabelo, 544 00:41:29,000 --> 00:41:35,000 kiam ni dequeue, nia kapo estu modded reen al 0. 545 00:41:35,000 --> 00:41:40,000 Bedaŭrinde, ni ne povas fari tion en unu paŝo. 546 00:41:40,000 --> 00:41:44,000 Mi supozas ke la vojo mi probable ripari ĝin estas 547 00:41:44,000 --> 00:41:52,000 ĉi tiu tuj estos char *, kion ni reveni, 548 00:41:52,000 --> 00:41:55,000 kion ajn vi variablo nomo volas esti. 549 00:41:55,000 --> 00:42:02,000 Tiam ni volas mod kapo por nia kapablo 550 00:42:02,000 --> 00:42:10,000 kaj tiam revenu ret. 551 00:42:10,000 --> 00:42:14,000 Multaj homoj tie ili agu- 552 00:42:14,000 --> 00:42:19,000 ĉi tiu estas la kazo de-you'll vidi homon fari se kapo 553 00:42:19,000 --> 00:42:29,000 estas pli granda ol kapablo, do kapo - kapablo. 554 00:42:29,000 --> 00:42:36,000 Kaj tio nur funkcias ĉirkaŭ kio mod estas. 555 00:42:36,000 --> 00:42:41,000 Kapo mod = kapablo estas multe pli pura 556 00:42:41,000 --> 00:42:51,000 de kroĉas ĉirkaŭ ol se kapo granda ol kapablo kapo - kapablo. 557 00:42:51,000 --> 00:42:56,000 >> Demandoj? 558 00:42:56,000 --> 00:43:02,000 Konsentite, la lasta afero ni forlasis estas nia ligillisto. 559 00:43:02,000 --> 00:43:07,000 Vi povus esti uzata por iu el la ligitaj listo konduton, se vi faris 560 00:43:07,000 --> 00:43:11,000 ligitaj listoj en via hash tabloj, se vi faris hash tablo. 561 00:43:11,000 --> 00:43:15,000 Mi forte rekomendas fari hash tablo. 562 00:43:15,000 --> 00:43:17,000 Vi eble jam faris trie, 563 00:43:17,000 --> 00:43:23,000 sed klopodoj estas pli malfacila. 564 00:43:23,000 --> 00:43:27,000 En teorio, ili estas asimptote pli bona. 565 00:43:27,000 --> 00:43:30,000 Sed ĝuste rigardi la grandan tabulon, 566 00:43:30,000 --> 00:43:35,000 kaj provas neniam faros pli bona, kaj ili prenu pli memoro. 567 00:43:35,000 --> 00:43:43,000 Ĉion pri provas finas esti malbona por pli da laboro. 568 00:43:43,000 --> 00:43:49,000 Estas kion David Malan la solvon ĉiam estas 569 00:43:49,000 --> 00:43:56,000 Estas li ĉiam afiŝojn sia trie solvo, kaj ni vidu, kie li nun estas. 570 00:43:56,000 --> 00:44:00,000 Kio estis li sub, Davido J? 571 00:44:00,000 --> 00:44:06,000 Li estas # 18, do tio ne terure malbona, 572 00:44:06,000 --> 00:44:09,000 kaj tio tuj estos unu el la plej bonaj provas vi povas pensi pri 573 00:44:09,000 --> 00:44:17,000 aŭ unu el la plej bonaj provas de trie. 574 00:44:17,000 --> 00:44:23,000 Ĉu ne eĉ liaj originalaj solvo? 575 00:44:23,000 --> 00:44:29,000 Mi sentas trie solvoj emas esti pli en ĉi tiu rango de RAM uzado. 576 00:44:29,000 --> 00:44:33,000 >> Iru al la plejsupro kaj RAM-uzado estas en la simpla ciferoj. 577 00:44:33,000 --> 00:44:36,000 Iru al la fundo, kaj tiam vi komencos vidi provas 578 00:44:36,000 --> 00:44:41,000 kie vi ricevis absolute amasa RAM uzado, 579 00:44:41,000 --> 00:44:45,000 kaj klopodoj estas pli malfacila. 580 00:44:45,000 --> 00:44:53,000 Ne tute valoras ĝin sed eduka sperton se vi faris. 581 00:44:53,000 --> 00:44:56,000 La lasta afero estas nia ligillisto, 582 00:44:56,000 --> 00:45:04,000 kaj ĉi tiuj tri aĵoj, piloj, vostoj, kaj kunligita lertaj, 583 00:45:04,000 --> 00:45:09,000 neniu estonteco afero vi iam fari en komputiko 584 00:45:09,000 --> 00:45:12,000 supozos vi havas familiarecon kun tiuj aĵoj. 585 00:45:12,000 --> 00:45:19,000 Ili estas simple tiel fundamenta por ĉio. 586 00:45:19,000 --> 00:45:25,000 >> Ligitaj lertaj, kaj tie ni estas sole ligitaj listo tuj estos nia efektivigo. 587 00:45:25,000 --> 00:45:34,000 Kion unuope ligitaj signifi kiel kontraŭ duoble ligitaj? Jes. 588 00:45:34,000 --> 00:45:37,000 [Studenta] Ĝi nur notas al la sekvanta puntero prefere ol la punteros, 589 00:45:37,000 --> 00:45:39,000 kiel la antaŭira kaj la post tio. 590 00:45:39,000 --> 00:45:44,000 Yeah, do en bildo formato, kion mi ne nur faru? 591 00:45:44,000 --> 00:45:48,000 Mi havas du aĵojn. Mi havas bildon kaj bildoj. 592 00:45:48,000 --> 00:45:51,000 En bildo formato, nia unuope ligitaj lertaj, 593 00:45:51,000 --> 00:45:57,000 neeviteble, ni havas ian sagon al la kapo de nia listo, 594 00:45:57,000 --> 00:46:02,000 kaj poste en nia listo, ni nur devas punteros, 595 00:46:02,000 --> 00:46:05,000 kaj eble ĉi punktoj al nula. 596 00:46:05,000 --> 00:46:08,000 Ĝi tuj estos via tipa desegno de unuope ligitaj listo. 597 00:46:08,000 --> 00:46:14,000 Al duoble ligitaj listo, vi povas iri malantaŭen. 598 00:46:14,000 --> 00:46:19,000 Se mi donas al vi neniun nodo en la listo, tiam vi povas nepre atingos 599 00:46:19,000 --> 00:46:23,000 iu ajn alia nodo en la listo, se estas duoble ligitaj listo. 600 00:46:23,000 --> 00:46:27,000 Sed se mi kaptos vin la tria vertico en la listo kaj ĝi estas sole ligitaj listo, 601 00:46:27,000 --> 00:46:30,000 neniel vi iam ricevos por la unua kaj dua nodoj. 602 00:46:30,000 --> 00:46:34,000 Kaj estas profitojn kaj detriments, kaj unu evidenta unu 603 00:46:34,000 --> 00:46:42,000 estas vi levu pli grandeco, kaj vi devas konservi trako de kie ĉi tiuj aferoj estas montrante nun. 604 00:46:42,000 --> 00:46:49,000 Sed ni nur zorgas pri unuope ligitaj. 605 00:46:49,000 --> 00:46:53,000 >> Kelkajn aferojn ni tuj devos apliki. 606 00:46:53,000 --> 00:47:00,000 Via typedef struct nodo, int i: struct nodo * sekva; nodo. 607 00:47:00,000 --> 00:47:09,000 Ke typedef estu bruligita en viajn mensojn. 608 00:47:09,000 --> 00:47:14,000 Kvizo 1 devus esti kiel doni typedef de ligitaj listo nodo, 609 00:47:14,000 --> 00:47:18,000 kaj vi devus povi tuj scribble ke malsupren 610 00:47:18,000 --> 00:47:22,000 sen eĉ pensi pri ĝi. 611 00:47:22,000 --> 00:47:27,000 Mi supozas paron demandojn, kial ni bezonas struct tie? 612 00:47:27,000 --> 00:47:32,000 Kial ne povas ni diri nodo *? 613 00:47:32,000 --> 00:47:35,000 [Studenta] [inaudible] 614 00:47:35,000 --> 00:47:38,000 Yeah. 615 00:47:38,000 --> 00:47:44,000 La sola afero, kiu difinas nodo kiel afero 616 00:47:44,000 --> 00:47:47,000 estas la typedef mem. 617 00:47:47,000 --> 00:47:55,000 Sed de tiu punkto, kiam ni estas speco de sintaksa analizo tra ĉi struct nodo difino, 618 00:47:55,000 --> 00:48:01,000 ni ne finis nian typedef ankoraŭ, do ekde la typedef ne finis, 619 00:48:01,000 --> 00:48:05,000 nodo ne ekzistas. 620 00:48:05,000 --> 00:48:12,000 Sed struct nodo faras, kaj ĉi nodo en ĉi tie, 621 00:48:12,000 --> 00:48:14,000 ĉi tio povus ankaŭ nomiĝi io alia. 622 00:48:14,000 --> 00:48:16,000 Tio povus esti nomata n. 623 00:48:16,000 --> 00:48:19,000 Ĝi povus esti nomata ligillisto nodo. 624 00:48:19,000 --> 00:48:21,000 Ĝi povus nomi ion. 625 00:48:21,000 --> 00:48:26,000 Sed ĉi struct nodo bezonas nomi la sama afero kiel tio struct nodo. 626 00:48:26,000 --> 00:48:29,000 Kion vi nomas tiun devas ankaŭ esti tie, 627 00:48:29,000 --> 00:48:32,000 kaj por ke ankaŭ respondas la dua punkto de la demando 628 00:48:32,000 --> 00:48:37,000 tial-multe da fojoj kiam vi vidos structs kaj typedefs de structs, 629 00:48:37,000 --> 00:48:42,000 vi vidos anonima structs kie vi nur vidas typedef struct, 630 00:48:42,000 --> 00:48:47,000 efektivigo de struct, vortaro, aŭ kion ajn. 631 00:48:47,000 --> 00:48:51,000 >> Kial ĉi tie ni devas diri nodo? 632 00:48:51,000 --> 00:48:54,000 Kial ne estus anonima struct? 633 00:48:54,000 --> 00:48:56,000 Estas preskaŭ la sama respondo. 634 00:48:56,000 --> 00:48:58,000 [Studenta] Vi devas raporti al tio ene de la struct. 635 00:48:58,000 --> 00:49:04,000 Yeah, ene de la struct, vi devas raporti al la struct mem. 636 00:49:04,000 --> 00:49:10,000 Se vi ne donos la struct nomon, se ĝi estas anonima struct, vi ne povas referi al ĝi. 637 00:49:10,000 --> 00:49:17,000 Kaj laste sed ne malpleje-tiuj devus ĉiuj estos iom simpla, 638 00:49:17,000 --> 00:49:20,000 kaj ili helpos vin realigi se vi skribas ĉi malsupren 639 00:49:20,000 --> 00:49:24,000 ke vi faras ion malĝustan se tiajn aferojn ne havas sencon. 640 00:49:24,000 --> 00:49:28,000 Laste sed ne malpleje, kial ĉi tiu devas esti struct nodo *? 641 00:49:28,000 --> 00:49:34,000 Kial ne povas simple esti struct nodo poste? 642 00:49:34,000 --> 00:49:37,000 [Studenta] Pointer al la sekvanta struct. 643 00:49:37,000 --> 00:49:39,000 Tio estas neeviteble kion ni volas. 644 00:49:39,000 --> 00:49:42,000 Kial povis ĝin neniam struct nodo poste? 645 00:49:42,000 --> 00:49:50,000 Kial ĝi devas esti struct nodo * poste? Yeah. 646 00:49:50,000 --> 00:49:53,000 [Studenta] Estas kiel senfina ciklo. 647 00:49:53,000 --> 00:49:55,000 Yeah. 648 00:49:55,000 --> 00:49:57,000 [Studenta] Estus ĉiuj estos en unu. 649 00:49:57,000 --> 00:50:02,000 Yeah, nur pensi pri kiel ni farus grandeco de aŭ io. 650 00:50:02,000 --> 00:50:08,000 Grandeco de struct estas esence + aŭ - iuj mastro ĉi tie aŭ tie. 651 00:50:08,000 --> 00:50:15,000 Ĝi estas esence tuj estos la sumo de la grandecoj de la aĵoj en la struct. 652 00:50:15,000 --> 00:50:18,000 Tiu rajto tie, sen ŝanĝi ion, la grandeco tuj estos facila. 653 00:50:18,000 --> 00:50:24,000 Grandeco de struct nodo tuj estos grandeco de i + grandeco de alia. 654 00:50:24,000 --> 00:50:27,000 Grandeco de i tuj estos 4. Grandeco de la proksima tuj estos 4. 655 00:50:27,000 --> 00:50:30,000 Grandeco de struct nodo tuj estos 8. 656 00:50:30,000 --> 00:50:34,000 Se ni ne havas la *, pensante pri sizeof, 657 00:50:34,000 --> 00:50:37,000 tiam sizeof (i) tuj estos 4. 658 00:50:37,000 --> 00:50:43,000 Grandeco de struct nodo sekva tuj estos grandeco de i + grandeco de struct nodo sekva 659 00:50:43,000 --> 00:50:46,000 + Grandeco de i + grandeco de struct nodo proksima. 660 00:50:46,000 --> 00:50:55,000 Estus malfinia rekursio de nodoj. 661 00:50:55,000 --> 00:51:00,000 Jen kial ĉi tiu estas kiel la aferoj devas esti. 662 00:51:00,000 --> 00:51:03,000 >> Denove, definitive enmemorigi ke, 663 00:51:03,000 --> 00:51:06,000 aŭ almenaŭ komprenas sufiĉe ke vi povas atingi 664 00:51:06,000 --> 00:51:12,000 Tial per kio ĝi devus aspekti. 665 00:51:12,000 --> 00:51:14,000 La aferojn kiujn ni tuj volas apliki. 666 00:51:14,000 --> 00:51:18,000 Se longo de la listo- 667 00:51:18,000 --> 00:51:21,000 vi povus trompi kaj observu ĉirkaŭ 668 00:51:21,000 --> 00:51:24,000 tutmonda longeco aŭ ion, sed ni ne faros tion. 669 00:51:24,000 --> 00:51:28,000 Ni tuj kalkulis la longo de la listo. 670 00:51:28,000 --> 00:51:34,000 Ni enhavas, do tio estas esence kiel serĉo, 671 00:51:34,000 --> 00:51:41,000 do ni havos ligitaj listo de entjeroj por vidi se tiun entjero estas en la ligitaj listo. 672 00:51:41,000 --> 00:51:44,000 Prepend tuj enigi en la komenco de la listo. 673 00:51:44,000 --> 00:51:46,000 Append tuj enigi en la fino. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted tuj enigi en la ordo pozicio en la listo. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted ia supozas ke vi neniam uzis prepend aŭ aldonas en malbonaj manieroj. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted kiam vi apliki insert_sorted- 677 00:52:09,000 --> 00:52:13,000 diru ni havas niajn ligitaj listo. 678 00:52:13,000 --> 00:52:18,000 Ĉi tio estas kio aktuale aspektas, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Mi volas enmeti 3, do dum la listo mem jam ordo, 680 00:52:24,000 --> 00:52:27,000 ĝi estas facile trovi kie 3 apartenas. 681 00:52:27,000 --> 00:52:29,000 Mi komencos je 2. 682 00:52:29,000 --> 00:52:32,000 Okay, 3 estas pli granda ol 2, do mi volas plu iri. 683 00:52:32,000 --> 00:52:35,000 Ho, 4 estas tro granda, do mi scias 3 tuj iros inter 2 kaj 4, 684 00:52:35,000 --> 00:52:39,000 kaj mi devas korekti punteros kaj cxio, kion aĵoj. 685 00:52:39,000 --> 00:52:43,000 Sed se ni ne strikte uzi insert_sorted, 686 00:52:43,000 --> 00:52:50,000 kiel ni ĵus diris mi prepend 6, 687 00:52:50,000 --> 00:52:55,000 tiam mia ligillisto tuj fariĝis ĉi. 688 00:52:55,000 --> 00:53:01,000 Ĝi nun ne havas senson, do por insert_sorted, vi povas simple supozi 689 00:53:01,000 --> 00:53:04,000 ke la listo estas ordigita, kvankam operacioj ekzistas 690 00:53:04,000 --> 00:53:09,000 kio povas kaŭzi ĝin ne povas ordo, kaj tio estas ĝi. 691 00:53:09,000 --> 00:53:20,000 Trovu helpema insert-do tiuj estas la ĉefaj aĵoj vi tuj devos apliki. 692 00:53:20,000 --> 00:53:24,000 >> Por la momento, prenu unu minuto por fari longa kaj enhavas, 693 00:53:24,000 --> 00:53:30,000 kaj tiuj devus esti relative rapida. 694 00:53:41,000 --> 00:53:48,000 Proksima fermo tempo, do neniu havas ion por longo aŭ enhavas? 695 00:53:48,000 --> 00:53:50,000 Ili iras al esti preskaŭ identaj. 696 00:53:50,000 --> 00:53:57,000 [Studenta] Longa. 697 00:53:57,000 --> 00:54:01,000 Ni vidas, revizio. 698 00:54:01,000 --> 00:54:04,000 Okay. 699 00:54:12,000 --> 00:54:15,000 Vi volas klarigi? 700 00:54:15,000 --> 00:54:21,000 [Studenta] Mi nur krei puntero nodo kaj pravalorizi ĝin al la unua, kiu estas nia tutmonda variablo, 701 00:54:21,000 --> 00:54:27,000 kaj tiam mi kontroli por vidi se ĝi estas nula do mi ne ricevas seg kulpo kaj reveni 0 se tio estas la kazo. 702 00:54:27,000 --> 00:54:34,000 Alie, mi buklo tra, konservanta trako de ene entjero 703 00:54:34,000 --> 00:54:38,000 kiom da fojoj mi Montrita la sekvanta elemento de la listo 704 00:54:38,000 --> 00:54:43,000 kaj en la sama pliigo operacio ankaŭ aliro ke reala elemento, 705 00:54:43,000 --> 00:54:47,000 kaj tiam mi senĉese fari la ĉekon al vidi se ĝi estas nula, 706 00:54:47,000 --> 00:54:56,000 kaj se ĝi estas nula, tiam abortas kaj ĝuste redonas la nombron de elementoj kiujn mi Montrita. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Ĉu iu havas komentoj pri io? 708 00:55:01,000 --> 00:55:06,000 Ĉi aspektas bela praveco saĝa. 709 00:55:06,000 --> 00:55:10,000 [Studenta] Mi ne pensas, ke vi bezonas la nodo == nula. 710 00:55:10,000 --> 00:55:13,000 Yeah, do se nodo == null reveno 0. 711 00:55:13,000 --> 00:55:18,000 Sed se nodo == null tiam ĉi-oh, estas praveco temo. 712 00:55:18,000 --> 00:55:23,000 Ĝi estis nur vi reveni i, sed ne en la medio nun. 713 00:55:23,000 --> 00:55:30,000 Vi nur bezonas int i, do mi = 0. 714 00:55:30,000 --> 00:55:34,000 Sed se nodo estas nula, tiam mi estas ankoraŭ tuj esti 0, 715 00:55:34,000 --> 00:55:39,000 kaj ni tuj revenos 0, tiel ĉi tiu kazo estas identaj. 716 00:55:39,000 --> 00:55:48,000 Alia komuna afero estas, por gardi la deklaro 717 00:55:48,000 --> 00:55:51,000 de nodo ene de la por buklo. 718 00:55:51,000 --> 00:55:54,000 Vi povus diri-oh, ne. 719 00:55:54,000 --> 00:55:56,000 Ni observu ĝin kiel ĉi tio. 720 00:55:56,000 --> 00:55:59,000 Mi verŝajne metos int i = 0 ĉi tie, 721 00:55:59,000 --> 00:56:05,000 tiam nodo * nodo = unua en ĉi tie. 722 00:56:05,000 --> 00:56:11,000 Kaj jen estas probable kiel-liveri de tiu nun. 723 00:56:11,000 --> 00:56:14,000 Tio estas probable ke mi estus skribinta ĝin. 724 00:56:14,000 --> 00:56:21,000 Vi povus ankaŭ-rigardante ĝin kiel ĉi tio. 725 00:56:21,000 --> 00:56:25,000 Ĉi por buklo strukturo ĉi tie 726 00:56:25,000 --> 00:56:30,000 devus esti preskaŭ kiel natura al vi kiel por int i = 0 727 00:56:30,000 --> 00:56:33,000 i estas malpli ol longo de tabelo mi + +. 728 00:56:33,000 --> 00:56:38,000 Se tiel estas kiel vi persisti super tabelo, jen kiel vi persisti super ligitaj listo. 729 00:56:38,000 --> 00:56:45,000 >> Ĉi tiu devus esti dua naturo en iu punkto. 730 00:56:45,000 --> 00:56:50,000 Kun tio en menso, ĉi tiu tuj estos preskaŭ la sama afero. 731 00:56:50,000 --> 00:56:57,000 Vi tuj volas persisti super ligillisto. 732 00:56:57,000 --> 00:57:02,000 Se la nodo-Mi ne havas ideon kion la valoro estas nomita. 733 00:57:02,000 --> 00:57:04,000 Nodo i. 734 00:57:04,000 --> 00:57:15,000 Se la valoro je tiu nodo = i revenos vera, kaj tiu estas ĝi. 735 00:57:15,000 --> 00:57:18,000 Rimarku, ke la sola maniero ni iam revenos malvera 736 00:57:18,000 --> 00:57:23,000 estas, se ni persisti super la tuta ligitaj listo kaj neniam revenas vera, 737 00:57:23,000 --> 00:57:29,000 do tio estas kion ĉi faras. 738 00:57:29,000 --> 00:57:36,000 Kiel noto-ni verŝajne ne atingos aldonas aŭ prepend. 739 00:57:36,000 --> 00:57:39,000 >> Rapida lasta noto. 740 00:57:39,000 --> 00:57:52,000 Se vi vidas la statika ŝlosilvorto, do diru statika int grafo = 0, 741 00:57:52,000 --> 00:57:56,000 tiam ni faros grafo + +, vi povas esence pensas pri ĝi kiel tutmonda variablo, 742 00:57:56,000 --> 00:58:00,000 kvankam mi ĵus diris ĉi tio ne estas kiel ni tuj apliki longa. 743 00:58:00,000 --> 00:58:06,000 Mi faras ĉi tie, kaj tiam kalkulu + +. 744 00:58:06,000 --> 00:58:11,000 Iamaniere oni povas eniri nodo en niajn ligillisto ni pliigante nia grafo. 745 00:58:11,000 --> 00:58:15,000 La punkto de ĉi tio estas kion la statika ŝlosilvorto signifas. 746 00:58:15,000 --> 00:58:20,000 Se mi nur havis int grafo = 0 kiu estus regula malnova malloka variablo. 747 00:58:20,000 --> 00:58:25,000 Kio statika int grafo signifas ke estas malloka variablo por ĉi tiu dosiero. 748 00:58:25,000 --> 00:58:28,000 Estas neebla por iu alia dosiero, 749 00:58:28,000 --> 00:58:34,000 kiel pensi pset 5, se vi komencis. 750 00:58:34,000 --> 00:58:39,000 Vi havas ambaŭ speller.c, kaj vi devas dictionary.c, 751 00:58:39,000 --> 00:58:42,000 kaj se vi simple deklarus afero tutmonda, tiam nenio en speller.c 752 00:58:42,000 --> 00:58:45,000 povas aliri en dictionary.c kaj inverse. 753 00:58:45,000 --> 00:58:48,000 Suma variabloj estas atingebla per neniu. C dosiero, 754 00:58:48,000 --> 00:58:54,000 sed statika variablo estas nur alirebla de ene la dosieron mem, 755 00:58:54,000 --> 00:59:01,000 tiel ene de ortografia kontrolilo aŭ ene de dictionary.c, 756 00:59:01,000 --> 00:59:06,000 ĉi tiu estas speco de kiel mi deklarus mia variablo por la grandeco de mia tabelo 757 00:59:06,000 --> 00:59:10,000 aŭ la grandecon de mia nombro de vortoj en la vortaro. 758 00:59:10,000 --> 00:59:15,000 Ĉar mi ne volas deklari tutmonda variablo kiu neniu havas aliron al, 759 00:59:15,000 --> 00:59:18,000 Mi vere nur zorgas pri ĝi por mia propra uzo. 760 00:59:18,000 --> 00:59:21,000 >> La bona afero pri ĉi tiu estas ankaŭ la tuta nomo kolizio stuff. 761 00:59:21,000 --> 00:59:27,000 Se iu alia dosiero provas uzi tutmonda variablo nomas grafo, aĵoj iras tre tre malbone, 762 00:59:27,000 --> 00:59:33,000 tial ĉi bele subtenas tion sekuraj, kaj nur povas konsenti ĝin, 763 00:59:33,000 --> 00:59:38,000 kaj neniu alia povas, kaj se iu alia deklaras malloka variablo nomas grafo, 764 00:59:38,000 --> 00:59:43,000 tiam ĝi ne malhelpas vian statika variablo nomas grafo. 765 00:59:43,000 --> 00:59:47,000 Tion statika estas. Ĝi estas dosiero malloka variablo. 766 00:59:47,000 --> 00:59:52,000 >> Demandojn sur ion? 767 00:59:52,000 --> 00:59:59,000 Ĉiuj aro. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]