[Powered by Google Translate] Dezagun array buruz hitz egiteko.
Beraz, zergatik array erabiltzea nahi dugu inoiz?
Beno dezagun esan 5 ikaslea identifikazioak gordetzeko programa bat behar duzu.
Badirudi arrazoizkoa izan daiteke bereizi aldagai 5.
Arrazoiak direla eta pixka bat ikusi dugu, hasi 0 hasita dugu.
Izan dugu aldagai int id0, id1 int, eta abar izango dira.
Ikaslearen ID bat egin nahi dugu edozein logika kopiatu eta itsatsi beharko du
ikaslea identifikazioak horietako bakoitzean.
Nahi dugu zein ikasle gertatuko CS50 izango da egiaztatu nahi izanez gero,
id0 ikastaroaren ikasleak adierazten badu egiaztatu behar dugu lehenik eta behin.
Ondoren, gauza bera egin zuen hurrengo ikasle, kodea id0 kopiatu eta itsatsi behar dugu
eta ordezkatu id0 agerraldi guztiak id1 eta id2, 3 eta 4.
>> Bezain laster entzuten baduzu, kopiatu eta itsatsi behar dugun bezala,
ez dagoela irtenbide bat hobea da pentsatzen hasi behar duzu.
Orain, zer ez duzu 5 ikaslea identifikazioak baizik 7 konturatzen baduzu?
Iturburu-kodea atzera sartu eta id5 bat gehitu behar duzu, id6
eta kopiatu eta itsatsi egiaztatzeko logika identifikazioak 2 identifikazioak berri horiek klase sartzen bada.
Ez dago ezer identifikazioak horiek guztiak elkarrekin konektatuz da, eta beraz, ez dago eskatuz modu ez da
Programa hau egin IDak 0 6.
Beno, gaur egun 100 ikaslea identifikazioak duzu konturatzen zara.
Ideal baino gutxiago diruditen banaka deklaratu identifikazioak horiek bakoitzaren behar da aurrera,
eta edozein horien berri identifikazioak logika kopiatu eta itsatsi.
Baina agian gaude erabakitzen dute, eta 100 ikasle guztiak egiten dugu.
Baina, zer egin ez badakizu, zenbat ikasle dago benetan?
-N ikasle batzuk besterik ez dira, eta zure programa erabiltzaileak zer n dela eskatu du.
Uh oh. Hau ez da oso ondo lan egingo da.
Zure programa, ikasle kopurua konstante batzuk bakarrik lan egiten du.
>> Arazo horiek guztiak konpontzeko array edertasuna da.
Beraz, zer da array bat da?
Array mota bat programazio hizkuntza batzuetan pixka bat gehiago egiteko gai izan daiteke,
baina hemen array datuak oinarrizko egitura dugu arreta bezala ikusiko duzu C.
Array bat memoria-bloke handi bat besterik ez da. Dela.
10 zenbaki osoen array bat dugu, besterik gabe, esan nahi ditugu bloke batzuk esaten dugu
memoria handia da nahikoa aparteko zenbaki osoko 10.
Zenbaki oso bat da, 4 byte hartuta, horrek esan nahi du, 10 zenbaki osoen array
40 memoria byte bloke etengabea da.
Nahiz eta multidimentsionala array, ez dugu hemen, joan erabiltzen duzunean,
oraindik memoria-bloke handi bat besterik ez da.
Idazkera multidimensional besterik ez da onerako.
Baduzu, bada, 3 zenbaki osoen array multidimensional, 3
ondoren zure programa benetan besterik ez tratatzeko 36 byte bloke handi bat bezala.
Osoko zenbakien kopurua, guztira 3 aldiz 3 da, eta zenbaki oso bakoitza 4 byte hartzen du.
>> Hartu dezagun adibidez oinarrizko begirada bat.
Ikusiko dugu hemendik 2 array geratuko ezberdinak.
Horietako 1 programa konpilatu behar duzu dugu
aldarrikatzen dugu x geroztik birritan.
Pixka bat 2 deklarazioak mota horien artean desberdintasunak batzuk begirada bat hartuko dugu.
Bi lerro hauen deklaratzeko tamaina N array bat,
# dugu define N 10.
Besterik ez izan dugu erraz eskatu erabiltzaileari zenbaki oso positibo bat
eta gure array elementu gisa erabiltzen osokoa dela.
Atsegin dut gure ikasleak ID Adibidez baino lehen, hau da, mota horretako 10 erabat bereizita geratuko bezala
irudimenezko aldagai; x0, x1, x2, eta, beraz, xn-1.
Lerroak alde batetara uzten non array aldarrikatzen dugu, nabarituko karratu parentesi artean oso-osorik
loops for barruan.
X antzeko zerbait idazteko dugu [3], x bracket 3 besterik ez dut irakurri,
dezakezu uste gustatzen irudimenezko x3 galdetuz.
Tamaina N, horrek esan nahi du parentesi artean barruan zenbaki, array bat baino hasiera
indizea deitu dugu, 0-tik N-1 ezer izan daiteke,
N indizeak guztira.
>> Hau nola benetan funtzionatzen pentsatzen
gogoratu array memoria-bloke handi bat da.
Zenbaki oso bat da, 4 byte onartuz, array osoa x 40 byte memoria-bloke bat da.
Beraz, x0 blokea 4 bytes oso lehen aipatzen.
X [1] hurrengo 4 byte eta abar dagokio.
Horrek esan nahi du, x Irteeran programa inoiz segimendua egiteko behar da.
Nahi duzun x [400] erabili nahi izanez gero, ondoren, programa daki hori baliokideak
x hasieran ondoren 1.600 byte.
Where'd 1.600 byte lortuko dugu? Just 400 aldiz 4 osoko per byte da.
>> Mugitzea aurretik, oso garrantzitsua da konturatzen C
array erabiltzen dugun indizea betearazteko ez da.
Gure big bloke soilik 10 zenbaki osoko ditu, baina ez da ezer gurekin Yell idazten dugu x [20] bada
edo are x [-5].
Indizea ere ez dute zenbaki bat izan behar du.
Adierazpen arbitrarioak edozein izan daiteke.
Programa, aldagai i erabiltzen dugu array sartu indizea loop.
Eredu bat hau oso ohikoa da, 0 = i array luzera begizta batean,
eta, ondoren, i matrizearen indize gisa erabiliz.
Modu honetan array osoa baino gehiago eraginkortasunez loop,
eta bai dezakezu array Leku bakoitzari esleitu edo kalkulu batzuk erabili.
>> Loop lehen, hasten 0 i,
eta, beraz, array, lekuen 0 balioa 0 2 izango da esleitu.
Ondoren, i zatituko dugu, eta esleitzeko lehen spot array balioa 1 aldiz 2.
Ondoren, berriz, eta beraz, gehikuntzak i gora esleitu dugu, N-1 array kokatzeko arte
balioa N-1 aldiz 2.
Beraz, lehenengo 10 zenbaki bikoiti array bat sortu dugu.
Agian evens izan zen aldagaiaren izena bit x bat baino hobeto,
baina hori izan balira, gauzak kanpoan.
Loop Bigarren orduan besterik ez dagoeneko array barruan gordetzen dugun balioak bistaratzen ditu.
>> Programa exekutatzen ari bi array deklarazioak mota saiatu dezagun
eta programaren irteera begirada bat hartu.
Den neurrian, ikusi ahal izango dugun bezala, programa deklarazioak mota bi modu berean jokatzen du.
Dezagun zer gertatzen den begiratu ere egiten dute bat aldatu dugu lehenengo loop bada N at ez gelditzeko
baizik eta esan 10.000.
Array amaieran haratago Way.
Oops. Agian hau ikusi duzun aurretik.
Segmentaziuo hutsegitea ez dagoela "" esan nahi du zure programa kraskatu egin da.
Horiek ikusten hasten denean memoria eremu ez behar duzu ukitu ukitu.
Hemen 10.000 x hasiera haratago leku ari gara ukitu,
noski memorian lekua ez da behar dugu ukitu.
Gurekin gehienak, beraz, seguruenik ez litzateke ustekabean jarri 10.000 N-ordez,
baina zer egiten dugu zerbait gehiago sotila bezala esan idatzi baino gutxiago edo N-berdintasuna
loop baldintza aurrean N. baino gutxiago
Gogoratu array bat besterik ez da 0-tik N-1 indizeek,
horrek esan nahi du indizea N array amaieran haratago da.
Programa kasu honetan kraska agian ez, baina oraindik ere, errore bat da.
Izan ere, errore hau da, beraz, izen propioa du ez duela,
1 errore off bat.
>> Hori da oinarriak.
Beraz, zer dira 2 array deklarazioak mota arteko desberdintasun nagusiak?
One diferentzia non memoria bloke handia doa.
Lehen adierazpenean, bracket-array-mota deitu dut,
hau da, nahiz eta ez ohiko izen bat esan nahi du,
pila izango da.
Bigarrena, erakuslea-array-mota deitu dut, berriz, zeure gainean egingo da.
Horrek esan nahi du, funtzioak, bracket array automatikoki deallocated
deitu behar duzu explicitily gisa free erakuslea array, berriz,
edo, bestela, memoria-leak bat behar duzu.
Horrez gain, parentesia array ez da aldagai bat.
Hau oso garrantzitsua da. Sinbolo bat besterik ez da.
Da konpilatzailea duzula aukeratzen konstante bat dela pentsa dezakezu.
Horrek esan nahi du, x + + bracket mota antzeko zerbait egin ezin dugula,
hau da, ezin hobeki erakuslea mota baliozko arren.
>> Erakuslearen mota aldagai bat da.
Erakuslearen mota, memoria 2 bloke bereizi ditugu.
X aldagaia bera pilan gordetzen da eta erakuslea besterik ez da bakarra,
baina memoria-bloke handia da zeure buruzko gordetzen.
Pilaketan x aldagaia helbidea gordetzen
zeure buruzko memoria bloke handi.
Operadorea tamaina inplikazioa da.
Bracket array tamaina eskatuz gero, emango dizu memoria bloke handi tamaina
40 byte antzeko zerbait,
baina array mota erakuslea tamaina eskatuz gero,
emango dizu x aldagaia bera, aparatuaren litekeena da, izan ere, soilik 4 byte tamaina.
Erakuslea-array-mota erabiliz, ezinezkoa da zuzenean eskatu
memoria bloke handi tamaina.
Hau ez da normalean murriztapen bat askoz ere oso gutxitan nahi dugun tamaina
handi memoria blokea, eta, oro har, ezin dugu kalkulatu behar badugu.
>> Azkenik, parentesia array gertatzen da gurekin array bat hasieratzeko lasterbide bat eskaintzeko.
Dezagun nola nahiz eta lehenengo 10 zenbaki osoko shortcut initilization erabiliz idatzi izan dugu ikus-en.
Erakuslea array With, ez dago hau atsegin lasterbide bat egiteko modu bat.
Hau besterik ez da sarrera array egin dezakezu.
Erakusten dute ia programa guztietan idazten.
Zorionez, gaur egun ikus dezakezu ikasleak IDak Adibidez egiteko modu hobea
Bideoaren hasieran.
>> Nire izena Rob Bowden da, eta hau da CS50.