1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Dezagun array buruz hitz egiteko. 2 00:00:09,360 --> 00:00:12,780 Beraz, zergatik array erabiltzea nahi dugu inoiz? 3 00:00:12,780 --> 00:00:17,210 Beno dezagun esan 5 ikaslea identifikazioak gordetzeko programa bat behar duzu. 4 00:00:17,210 --> 00:00:21,270 Badirudi arrazoizkoa izan daiteke bereizi aldagai 5. 5 00:00:21,270 --> 00:00:24,240 Arrazoiak direla eta pixka bat ikusi dugu, hasi 0 hasita dugu. 6 00:00:24,240 --> 00:00:30,700 Izan dugu aldagai int id0, id1 int, eta abar izango dira. 7 00:00:30,700 --> 00:00:34,870 Ikaslearen ID bat egin nahi dugu edozein logika kopiatu eta itsatsi beharko du 8 00:00:34,870 --> 00:00:36,870 ikaslea identifikazioak horietako bakoitzean. 9 00:00:36,870 --> 00:00:39,710 Nahi dugu zein ikasle gertatuko CS50 izango da egiaztatu nahi izanez gero, 10 00:00:39,710 --> 00:00:43,910 id0 ikastaroaren ikasleak adierazten badu egiaztatu behar dugu lehenik eta behin. 11 00:00:43,910 --> 00:00:48,070 Ondoren, gauza bera egin zuen hurrengo ikasle, kodea id0 kopiatu eta itsatsi behar dugu 12 00:00:48,070 --> 00:00:54,430 eta ordezkatu id0 agerraldi guztiak id1 eta id2, 3 eta 4. 13 00:00:54,430 --> 00:00:57,560 >> Bezain laster entzuten baduzu, kopiatu eta itsatsi behar dugun bezala, 14 00:00:57,560 --> 00:01:00,440 ez dagoela irtenbide bat hobea da pentsatzen hasi behar duzu. 15 00:01:00,440 --> 00:01:05,360 Orain, zer ez duzu 5 ikaslea identifikazioak baizik 7 konturatzen baduzu? 16 00:01:05,360 --> 00:01:09,570 Iturburu-kodea atzera sartu eta id5 bat gehitu behar duzu, id6 17 00:01:09,570 --> 00:01:14,260 eta kopiatu eta itsatsi egiaztatzeko logika identifikazioak 2 identifikazioak berri horiek klase sartzen bada. 18 00:01:14,260 --> 00:01:19,600 Ez dago ezer identifikazioak horiek guztiak elkarrekin konektatuz da, eta beraz, ez dago eskatuz modu ez da 19 00:01:19,600 --> 00:01:22,040 Programa hau egin IDak 0 6. 20 00:01:22,040 --> 00:01:26,120 Beno, gaur egun 100 ikaslea identifikazioak duzu konturatzen zara. 21 00:01:26,120 --> 00:01:30,770 Ideal baino gutxiago diruditen banaka deklaratu identifikazioak horiek bakoitzaren behar da aurrera, 22 00:01:30,770 --> 00:01:33,760 eta edozein horien berri identifikazioak logika kopiatu eta itsatsi. 23 00:01:33,760 --> 00:01:38,380 Baina agian gaude erabakitzen dute, eta 100 ikasle guztiak egiten dugu. 24 00:01:38,380 --> 00:01:42,240 Baina, zer egin ez badakizu, zenbat ikasle dago benetan? 25 00:01:42,240 --> 00:01:47,320 -N ikasle batzuk besterik ez dira, eta zure programa erabiltzaileak zer n dela eskatu du. 26 00:01:47,320 --> 00:01:50,250 Uh oh. Hau ez da oso ondo lan egingo da. 27 00:01:50,250 --> 00:01:53,820 Zure programa, ikasle kopurua konstante batzuk bakarrik lan egiten du. 28 00:01:53,820 --> 00:01:57,520 >> Arazo horiek guztiak konpontzeko array edertasuna da. 29 00:01:57,520 --> 00:01:59,930 Beraz, zer da array bat da? 30 00:01:59,930 --> 00:02:04,480 Array mota bat programazio hizkuntza batzuetan pixka bat gehiago egiteko gai izan daiteke, 31 00:02:04,480 --> 00:02:09,960 baina hemen array datuak oinarrizko egitura dugu arreta bezala ikusiko duzu C. 32 00:02:09,960 --> 00:02:14,030 Array bat memoria-bloke handi bat besterik ez da. Dela. 33 00:02:14,030 --> 00:02:17,770 10 zenbaki osoen array bat dugu, besterik gabe, esan nahi ditugu bloke batzuk esaten dugu 34 00:02:17,770 --> 00:02:20,740 memoria handia da nahikoa aparteko zenbaki osoko 10. 35 00:02:29,930 --> 00:02:33,410 Zenbaki oso bat da, 4 byte hartuta, horrek esan nahi du, 10 zenbaki osoen array 36 00:02:33,410 --> 00:02:37,180 40 memoria byte bloke etengabea da. 37 00:02:42,660 --> 00:02:46,280 Nahiz eta multidimentsionala array, ez dugu hemen, joan erabiltzen duzunean, 38 00:02:46,280 --> 00:02:49,200 oraindik memoria-bloke handi bat besterik ez da. 39 00:02:49,200 --> 00:02:51,840 Idazkera multidimensional besterik ez da onerako. 40 00:02:51,840 --> 00:02:55,640 Baduzu, bada, 3 zenbaki osoen array multidimensional, 3 41 00:02:55,640 --> 00:03:00,650 ondoren zure programa benetan besterik ez tratatzeko 36 byte bloke handi bat bezala. 42 00:03:00,650 --> 00:03:05,460 Osoko zenbakien kopurua, guztira 3 aldiz 3 da, eta zenbaki oso bakoitza 4 byte hartzen du. 43 00:03:05,460 --> 00:03:07,750 >> Hartu dezagun adibidez oinarrizko begirada bat. 44 00:03:07,750 --> 00:03:10,660 Ikusiko dugu hemendik 2 array geratuko ezberdinak. 45 00:03:15,660 --> 00:03:18,580 Horietako 1 programa konpilatu behar duzu dugu 46 00:03:18,580 --> 00:03:20,900 aldarrikatzen dugu x geroztik birritan. 47 00:03:20,900 --> 00:03:25,140 Pixka bat 2 deklarazioak mota horien artean desberdintasunak batzuk begirada bat hartuko dugu. 48 00:03:25,140 --> 00:03:28,560 Bi lerro hauen deklaratzeko tamaina N array bat, 49 00:03:28,560 --> 00:03:30,740 # dugu define N 10. 50 00:03:30,740 --> 00:03:34,460 Besterik ez izan dugu erraz eskatu erabiltzaileari zenbaki oso positibo bat 51 00:03:34,460 --> 00:03:37,250 eta gure array elementu gisa erabiltzen osokoa dela. 52 00:03:37,250 --> 00:03:41,960 Atsegin dut gure ikasleak ID Adibidez baino lehen, hau da, mota horretako 10 erabat bereizita geratuko bezala 53 00:03:41,960 --> 00:03:49,000 irudimenezko aldagai; x0, x1, x2, eta, beraz, xn-1. 54 00:03:57,270 --> 00:04:00,840 Lerroak alde batetara uzten non array aldarrikatzen dugu, nabarituko karratu parentesi artean oso-osorik 55 00:04:00,840 --> 00:04:02,090 loops for barruan. 56 00:04:02,090 --> 00:04:09,660 X antzeko zerbait idazteko dugu [3], x bracket 3 besterik ez dut irakurri, 57 00:04:09,660 --> 00:04:13,090 dezakezu uste gustatzen irudimenezko x3 galdetuz. 58 00:04:13,090 --> 00:04:17,519 Tamaina N, horrek esan nahi du parentesi artean barruan zenbaki, array bat baino hasiera 59 00:04:17,519 --> 00:04:22,630 indizea deitu dugu, 0-tik N-1 ezer izan daiteke, 60 00:04:22,630 --> 00:04:25,660 N indizeak guztira. 61 00:04:25,660 --> 00:04:28,260 >> Hau nola benetan funtzionatzen pentsatzen 62 00:04:28,260 --> 00:04:31,260 gogoratu array memoria-bloke handi bat da. 63 00:04:31,260 --> 00:04:37,460 Zenbaki oso bat da, 4 byte onartuz, array osoa x 40 byte memoria-bloke bat da. 64 00:04:37,460 --> 00:04:41,360 Beraz, x0 blokea 4 bytes oso lehen aipatzen. 65 00:04:45,810 --> 00:04:49,230 X [1] hurrengo 4 byte eta abar dagokio. 66 00:04:49,230 --> 00:04:53,760 Horrek esan nahi du, x Irteeran programa inoiz segimendua egiteko behar da. 67 00:04:55,660 --> 00:04:59,840 Nahi duzun x [400] erabili nahi izanez gero, ondoren, programa daki hori baliokideak 68 00:04:59,840 --> 00:05:03,460 x hasieran ondoren 1.600 byte. 69 00:05:03,460 --> 00:05:08,780 Where'd 1.600 byte lortuko dugu? Just 400 aldiz 4 osoko per byte da. 70 00:05:08,780 --> 00:05:13,170 >> Mugitzea aurretik, oso garrantzitsua da konturatzen C 71 00:05:13,170 --> 00:05:17,080 array erabiltzen dugun indizea betearazteko ez da. 72 00:05:17,080 --> 00:05:23,180 Gure big bloke soilik 10 zenbaki osoko ditu, baina ez da ezer gurekin Yell idazten dugu x [20] bada 73 00:05:23,180 --> 00:05:26,060 edo are x [-5]. 74 00:05:26,060 --> 00:05:28,240 Indizea ere ez dute zenbaki bat izan behar du. 75 00:05:28,240 --> 00:05:30,630 Adierazpen arbitrarioak edozein izan daiteke. 76 00:05:30,630 --> 00:05:34,800 Programa, aldagai i erabiltzen dugu array sartu indizea loop. 77 00:05:34,800 --> 00:05:40,340 Eredu bat hau oso ohikoa da, 0 = i array luzera begizta batean, 78 00:05:40,340 --> 00:05:43,350 eta, ondoren, i matrizearen indize gisa erabiliz. 79 00:05:43,350 --> 00:05:46,160 Modu honetan array osoa baino gehiago eraginkortasunez loop, 80 00:05:46,160 --> 00:05:50,600 eta bai dezakezu array Leku bakoitzari esleitu edo kalkulu batzuk erabili. 81 00:05:50,600 --> 00:05:53,920 >> Loop lehen, hasten 0 i, 82 00:05:53,920 --> 00:05:58,680 eta, beraz, array, lekuen 0 balioa 0 2 izango da esleitu. 83 00:05:58,680 --> 00:06:04,370 Ondoren, i zatituko dugu, eta esleitzeko lehen spot array balioa 1 aldiz 2. 84 00:06:04,370 --> 00:06:10,170 Ondoren, berriz, eta beraz, gehikuntzak i gora esleitu dugu, N-1 array kokatzeko arte 85 00:06:10,170 --> 00:06:13,370 balioa N-1 aldiz 2. 86 00:06:13,370 --> 00:06:17,810 Beraz, lehenengo 10 zenbaki bikoiti array bat sortu dugu. 87 00:06:17,810 --> 00:06:21,970 Agian evens izan zen aldagaiaren izena bit x bat baino hobeto, 88 00:06:21,970 --> 00:06:24,760 baina hori izan balira, gauzak kanpoan. 89 00:06:24,760 --> 00:06:30,210 Loop Bigarren orduan besterik ez dagoeneko array barruan gordetzen dugun balioak bistaratzen ditu. 90 00:06:30,210 --> 00:06:33,600 >> Programa exekutatzen ari bi array deklarazioak mota saiatu dezagun 91 00:06:33,600 --> 00:06:36,330 eta programaren irteera begirada bat hartu. 92 00:06:51,450 --> 00:06:57,020 Den neurrian, ikusi ahal izango dugun bezala, programa deklarazioak mota bi modu berean jokatzen du. 93 00:06:57,020 --> 00:07:02,230 Dezagun zer gertatzen den begiratu ere egiten dute bat aldatu dugu lehenengo loop bada N at ez gelditzeko 94 00:07:02,230 --> 00:07:05,040 baizik eta esan 10.000. 95 00:07:05,040 --> 00:07:07,430 Array amaieran haratago Way. 96 00:07:14,700 --> 00:07:17,210 Oops. Agian hau ikusi duzun aurretik. 97 00:07:17,210 --> 00:07:20,440 Segmentaziuo hutsegitea ez dagoela "" esan nahi du zure programa kraskatu egin da. 98 00:07:20,440 --> 00:07:24,430 Horiek ikusten hasten denean memoria eremu ez behar duzu ukitu ukitu. 99 00:07:24,430 --> 00:07:27,870 Hemen 10.000 x hasiera haratago leku ari gara ukitu, 100 00:07:27,870 --> 00:07:31,920 noski memorian lekua ez da behar dugu ukitu. 101 00:07:31,920 --> 00:07:37,690 Gurekin gehienak, beraz, seguruenik ez litzateke ustekabean jarri 10.000 N-ordez, 102 00:07:37,690 --> 00:07:42,930 baina zer egiten dugu zerbait gehiago sotila bezala esan idatzi baino gutxiago edo N-berdintasuna 103 00:07:42,930 --> 00:07:46,830 loop baldintza aurrean N. baino gutxiago 104 00:07:46,830 --> 00:07:50,100 Gogoratu array bat besterik ez da 0-tik N-1 indizeek, 105 00:07:50,100 --> 00:07:54,510 horrek esan nahi du indizea N array amaieran haratago da. 106 00:07:54,510 --> 00:07:58,050 Programa kasu honetan kraska agian ez, baina oraindik ere, errore bat da. 107 00:07:58,050 --> 00:08:01,950 Izan ere, errore hau da, beraz, izen propioa du ez duela, 108 00:08:01,950 --> 00:08:03,970 1 errore off bat. 109 00:08:03,970 --> 00:08:05,970 >> Hori da oinarriak. 110 00:08:05,970 --> 00:08:09,960 Beraz, zer dira 2 array deklarazioak mota arteko desberdintasun nagusiak? 111 00:08:09,960 --> 00:08:13,960 One diferentzia non memoria bloke handia doa. 112 00:08:13,960 --> 00:08:17,660 Lehen adierazpenean, bracket-array-mota deitu dut, 113 00:08:17,660 --> 00:08:20,300 hau da, nahiz eta ez ohiko izen bat esan nahi du, 114 00:08:20,300 --> 00:08:22,480 pila izango da. 115 00:08:22,480 --> 00:08:27,450 Bigarrena, erakuslea-array-mota deitu dut, berriz, zeure gainean egingo da. 116 00:08:27,450 --> 00:08:32,480 Horrek esan nahi du, funtzioak, bracket array automatikoki deallocated 117 00:08:32,480 --> 00:08:36,419 deitu behar duzu explicitily gisa free erakuslea array, berriz, 118 00:08:36,419 --> 00:08:38,010 edo, bestela, memoria-leak bat behar duzu. 119 00:08:38,010 --> 00:08:42,750 Horrez gain, parentesia array ez da aldagai bat. 120 00:08:42,750 --> 00:08:45,490 Hau oso garrantzitsua da. Sinbolo bat besterik ez da. 121 00:08:45,490 --> 00:08:49,160 Da konpilatzailea duzula aukeratzen konstante bat dela pentsa dezakezu. 122 00:08:49,160 --> 00:08:52,970 Horrek esan nahi du, x + + bracket mota antzeko zerbait egin ezin dugula, 123 00:08:52,970 --> 00:08:56,240 hau da, ezin hobeki erakuslea mota baliozko arren. 124 00:08:56,240 --> 00:08:58,270 >> Erakuslearen mota aldagai bat da. 125 00:08:58,270 --> 00:09:01,510 Erakuslearen mota, memoria 2 bloke bereizi ditugu. 126 00:09:01,510 --> 00:09:06,060 X aldagaia bera pilan gordetzen da eta erakuslea besterik ez da bakarra, 127 00:09:06,060 --> 00:09:08,620 baina memoria-bloke handia da zeure buruzko gordetzen. 128 00:09:08,620 --> 00:09:11,010 Pilaketan x aldagaia helbidea gordetzen 129 00:09:11,010 --> 00:09:14,010 zeure buruzko memoria bloke handi. 130 00:09:14,010 --> 00:09:17,370 Operadorea tamaina inplikazioa da. 131 00:09:17,370 --> 00:09:22,480 Bracket array tamaina eskatuz gero, emango dizu memoria bloke handi tamaina 132 00:09:22,480 --> 00:09:24,620 40 byte antzeko zerbait, 133 00:09:24,620 --> 00:09:26,920 baina array mota erakuslea tamaina eskatuz gero, 134 00:09:26,920 --> 00:09:32,740 emango dizu x aldagaia bera, aparatuaren litekeena da, izan ere, soilik 4 byte tamaina. 135 00:09:32,740 --> 00:09:36,530 Erakuslea-array-mota erabiliz, ezinezkoa da zuzenean eskatu 136 00:09:36,530 --> 00:09:38,530 memoria bloke handi tamaina. 137 00:09:38,530 --> 00:09:42,530 Hau ez da normalean murriztapen bat askoz ere oso gutxitan nahi dugun tamaina 138 00:09:42,530 --> 00:09:46,980 handi memoria blokea, eta, oro har, ezin dugu kalkulatu behar badugu. 139 00:09:46,980 --> 00:09:51,490 >> Azkenik, parentesia array gertatzen da gurekin array bat hasieratzeko lasterbide bat eskaintzeko. 140 00:09:51,490 --> 00:09:56,130 Dezagun nola nahiz eta lehenengo 10 zenbaki osoko shortcut initilization erabiliz idatzi izan dugu ikus-en. 141 00:10:11,220 --> 00:10:14,470 Erakuslea array With, ez dago hau atsegin lasterbide bat egiteko modu bat. 142 00:10:14,470 --> 00:10:18,120 Hau besterik ez da sarrera array egin dezakezu. 143 00:10:18,120 --> 00:10:20,990 Erakusten dute ia programa guztietan idazten. 144 00:10:20,990 --> 00:10:24,390 Zorionez, gaur egun ikus dezakezu ikasleak IDak Adibidez egiteko modu hobea 145 00:10:24,390 --> 00:10:26,710 Bideoaren hasieran. 146 00:10:26,710 --> 00:10:29,960 >> Nire izena Rob Bowden da, eta hau da CS50.