[Powered by Google Translate] Räägime massiivid.
Miks me üldse tahame kasutada massiive?
Noh oletame, et sul on olemas programm, mis vajab salvestada 5 üliõpilane IDd.
See võib tunduda mõistlik on 5 eraldi muutujad.
Põhjustel me näeme natuke, hakkame lugedes 0.
Muutujad on meil saab olema int id0, int id1, ja nii edasi.
Iga loogika tahame läbi viia õpilase ID tuleb kopeerida ja kleepida
iga nimetatud üliõpilane IDd.
Kui me tahame, et kontrollida, kus õpilased juhtub olema CS50,
me kõigepealt pead kontrollima, kas id0 esindab õpilane käigus.
Siis teha sama järgmise üliõpilane, vajame kopeeri ja kleebi kood id0
ja asendada kõik esinemistest id0 koos id1 ja nii edasi ID2, 3 ja 4.
>> Niipea kui sa kuuled, et me peame kopeeri ja kleebi,
siis peaks hakkama mõtlema, et on olemas ka parem lahendus.
Mis nüüd, kui sa mõistad, sa ei pea 5 õpilane sümbolid vaid 7?
Sa pead minema tagasi oma lähtekoodi ja lisada ID5, id6,
ja kopeeri ja kleebi loogika kontrollimiseks, kui ID-d kuuluvad klassi jaoks need 2 uut ID-d.
Ei ole midagi ühendab kõik need sümbolid koos, ja nii ei ole võimalik taotleda
programm seda teha ID-d 0 kuni 6.
Noh nüüd sa mõistad, sul on 100 õpilase ID-d.
See hakkab tunduda vähem kui ideaalne vaja eraldi deklareerida kõik need sümbolid,
ja kopeeri ja kleebi mingit loogikat, et neid uusi isikutunnistusi.
Aga võibolla oleme otsustanud, ja me teeme seda kõik 100 õpilast.
Aga kui sa ei tea, kui palju õpilasi seal tegelikult on?
Seal on vaid mõned n õpilased ja teie programm on paluda kasutajal, mida see n.
Uh oh. See ei kavatse tööd väga hästi.
Teie programm töötab ainult teatud konstandi õpilaste arv.
>> Lahendada kõik need probleemid on ilu massiivid.
Mis on massiivi?
Mõnel programmeerimiskeeled massiivi tüüp võiksid teha natuke rohkem,
kuid siin me keskenduma põhiliste massiivi andmestruktuuri nagu näete seda C.
Massiiv on lihtsalt suur blokk mälu. Nii see on.
Kui me ütleme, et meil on hulgaliselt 10. täisarvud, mis tähendab lihtsalt meil on mõned plokk
mälu, mis on piisavalt suur, et hoidke 10 eraldi täisarvud.
Eeldades, et täisarv on 4 baiti, see tähendab, et massiivi 10. täisarvud
on pidev plokk 40 baiti mälu.
Isegi kui te kasutate mitmemõõtmelise massiivi, mida me ei lähe, et siin,
see on ikka lihtsalt suur blokk mälu.
Mitmemõõtmeline märke on lihtsalt mugavam.
Kui teil on 3 3 mitmemõõtmelise massiivi täisarvud,
siis teie programm tõesti ainult käsitada seda suur plokk 36 baiti.
Koguarv täisarvud on 3 korda 3, ja iga täisarv võtab kuni 4 baiti.
>> Võtame pilk lihtne näide.
Me näeme siin 2 erinevat viisi kuulutatakse massiivid.
Me peame Kommentaar 1 neist välja programmi koostamiseks
kuna me kuulutame kaks korda x.
Võtame pilk mõned erinevused 2 tüüpi deklaratsioone natuke.
Mõlemad read kuulutada massiivi suurus N,
kus oleme # define N 10.
Me võiks sama hästi palunud kasutaja jaoks positiivne täisarv
ja kasutada, et täisarv on mitmeid elemente meie massiivi.
Nagu meie õpilase ID Näiteks enne, see on selline nagu kuulutades 10. täiesti eraldi
kujuteldav muutujad; x0, x1, x2, ja nii edasi kuni xN-1.
Ignoreerimine liinidel, kus me kuulutame massiiv, märkate nurksulgudes puutumata
sees jaoks silmuseid.
Kui me kirjutame midagi x [3], mis ma just lugesin kui x sulg 3,
sa ei mõtle seda nagu paludes kujuteldava x3.
Teade kui massiivi suurus N, tähendab see, et number sees sulgudes,
mis me kutsume indeks võib olla ükskõik vahemikus 0 kuni n-1,
mis on kokku N indeksid.
>> Mõelda, kuidas see tegelikult töötab
meeles pidada, et massiiv on suur blokk mälu.
Eeldades, et täisarv on 4 baiti, kogu massiivi x on 40 baidi ploki mälu.
Nii x0 viitab kõige esimesele 4 baiti blokeerida.
X [1] viitab järgmise 4 baiti ja nii edasi.
See tähendab, et alguses x on kõigi programmi kunagi vaja jälgida.
Kui soovite kasutada x [400], siis programm teab, et see on samaväärne
lihtsalt 1600 baiti pärast algust x.
Kust me saame 1600 baiti? See on vaid 400 korda 4 baiti.
>> Enne, kui minna, see on väga oluline mõista, et C
ei ole täitmise indeks, mida me kasutame massiivi.
Meie suur blokk on ainult 10 täisarvud pikk, kuid miski ei karju meile, kui me kirjutame x [20]
või isegi x [-5].
Indeks ei pea olema number.
See võib olla meelevaldne väljend.
Programmis me kasutame muutuja i Vanuses jaoks silmuse indeks array.
See on väga levinud mudel, silmuspõletamise alates i = 0 kuni pikkusega massiiv,
ja siis kasutades I indeks array.
Sel viisil saate tõhusalt silmus üle kogu antennide massiivi,
ja võite igale kohapeal massiiv või kasutada seda mõnel arvutamisel.
>> Esimeses jaoks silmus, i algab 0,
ja nii see loovutada 0 kohapeal massiiv, väärtus 0 korda 2.
Siis ma sammuga ja me omistama esimese koha array väärtusest: 1 korda 2.
Siis ma sammuga uuesti ja nii edasi, kuni me määrata asendisse N-1 massiiv
väärtus n-1 korda 2.
Nii et me oleme loonud massiivi esimese 10 paarisarvud.
Ehk ühtlustab oleks olnud natuke parem nimi muutuja kui x,
kuid mis oleks andnud asjad ära.
Teine jaoks silmus siis lihtsalt trükib väärtused, mida oleme juba ladestunud massiivist.
>> Proovime töötab programm mõlemat tüüpi massiivi deklaratsioonid
ja kui heita pilk väljund programmi.
Niipalju kui me näeme, et programm käitub samamoodi mõlemat liiki deklaratsioonid.
Teeme ka võtta pilk, mis juhtub, kui me muudame esimese silmuse ei peatu N
vaid näiteks 10000.
Way kauem massiivi.
Oih. Võib-olla olete näinud seda enne.
Killustatust süü tähendab, et teie programm jooksis kokku.
Hakkate nägema neid kui sa ühendust valdkondades mälu sa ei peaks liigutav.
Siin on liigutav 10000 kohti kaugemale algust x,
mis ilmselt on koht mällu me ei tohiks liigutav.
Nii et enamik meist ilmselt ei kogemata panna 10,000 asemel N,
aga mis siis, kui me midagi peenemalt nagu ütlevad kirjutada alla või võrdne n
aastal jaoks silmus tingimus mitte vähem kui N.
Pea meeles, et massiiv on ainult indekseid vahemikus 0 kuni n-1,
mis tähendab, et indeks N on kauem massiivi.
Programm ei pruugi krahhi sel juhul, kuid see on ikka viga.
Tegelikult on see viga on nii üldine, et see on ta enda nime,
maha 1 viga.
>> Ongi põhitõed.
Millised on peamised erinevused 2 tüüpi massiivi deklaratsiooni?
Üks erinevus on see, kui suur ploki mälu läheb.
Esimesel deklaratsiooni, mis ma helistan sulg-massiivi tüüp,
kuigi see ei ole sugugi tavaline nimi,
see läheb pinu.
Arvestades teises, mis ma helistan pointer-massiivi tüüp, see läheb hunnik.
See tähendab, et kui funktsioon tagastab, sulg massiiv automaatselt deallocated,
arvestades, peate explicitily helistada tasuta pointer array
või siis sul on mälu leke.
Lisaks sulg massiivi ei ole tegelikult muutuja.
See on oluline. See on lihtsalt sümbol.
Sa ei mõtle seda pidevalt, et kompilaator valib sinu jaoks.
See tähendab, et me ei saa midagi teha nagu x + + koos klambri tüüp,
kuigi see on täiesti sobivaks osutiloendurid.
>> Osutiloendurid on muutuv.
Sest osutiloendurid, meil on 2 eraldi plokki mälu.
Muutuja x ise on hoida virnas ja on vaid üks pointer,
kuid suur blokk mälu on salvestatud hunnik.
Muutuja x kohta virna lihtsalt salvestab aadress
suur ploki mälu hunnik.
Üks järeldus on, mida suurem ettevõtja.
Kui te küsite suurus sulg massiiv, siis annan teile suur kui suur ploki mälu,
umbes 40 baiti,
aga kui te küsite suurus pointer tüüpi massiiv,
see annab sulle suuruse muutuja x ise, mis seadmele on tõenäoliselt vaid 4 baiti.
Kasutades osuti-massiivi tüüp, ei ole võimalik otse küsida
suur kui suur ploki mälu.
See ei ole tavaliselt palju piiranguid, sest me väga harva tahan suurus
suur ploki mälu, ja me tavaliselt seda arvutada, kui me seda vajame.
>> Lõpuks sulg massiivi juhtub meile otsetee initsialiseerimisel massiivi.
Vaatame, kuidas me võiks kirjutada esimese 10 isegi täisarvud kasutades otsetee initilization.
Mis pointer array, ei ole viis seda teha otsetee niimoodi.
See on vaid sissejuhatus, mida saate teha koos massiivid.
Nad näitavad üles peaaegu iga programm, mida kirjutad.
Loodetavasti saate nüüd näha, parimaks viisiks õpilane ID näide
aasta algusest video.
>> Minu nimi on Rob Bowden, ja see on CS50.