[Powered by Google Translate] Við skulum tala um fylki.
Svo hvers vegna vildi að við viljum alltaf að nota fylki?
Jæja við skulum segja að þú ert með forrit sem þarf að geyma 5 nemenda auðkenni.
Það kann að virðast sanngjarnt að hafa 5 aðskilin breytur.
Af munum sjá í hluti, munum við byrja að telja frá 0.
Breyturnar sem við munum hafa mun int id0, int id1, og svo framvegis.
Hvaða rökfræði við viljum framkvæma á nemandi ID þarf að afrita og líma
fyrir hvern þessara nemenda auðkenni.
Ef við viljum að athuga hvaða nemendur gerst að vera í CS50,
Við munum fyrst að athuga hvort id0 táknar nemanda í námskeiðinu.
Þá að gera það sama fyrir næsta nemanda, munum við þurfa að afrita og líma kóðann fyrir id0
og skipta út öllum tilfellum af id0 með id1 og svo framvegis fyrir id2, 3 og 4.
>> Um leið og þú heyrir að við þurfum að afrita og líma,
þú ættir að byrja að hugsa um að það er betri lausn.
Nú hvað ef þér grein fyrir að þú þarft ekki 5 nemandi auðkenni heldur 7?
Þú þarft að fara aftur í kóða og bæta við í id5, sem id6,
og afrita og líma rökfræði til að stilla ef auðkenni tilheyra flokki fyrir þessar 2 nýju auðkenni.
Það er ekkert að tengja öll þessi auðkenni saman, og svo það er engin leið til að biðja
forritið til að gera þetta fyrir auðkenni 0 í 6.
Jæja núna þú grein fyrir að þú hefur 100 nemandi auðkenni.
Það er að byrja að virðast minna en hugsjón að þurfa að sérstaklega lýsa öllum þessum auðkennum,
og afrita og líma allar rökfræði fyrir þá ný auðkenni.
En kannski erum við ákveðin, og við gerum það fyrir alla 100 nemendur.
En hvað ef þú veist ekki hversu margir nemendur eru í raun og veru er?
Það eru bara sumir n nemendur og program hefur til að spyrja notandann hvað sem n er.
Uh oh. Þetta er ekki að fara að vinna mjög vel.
Program virkar aðeins fyrir einhverjum stöðugum fjölda nemenda.
>> Leysa öll þessi vandamál er fegurð fylki.
Svo er það fylki?
Í sumum forritunarmál fylki tegund gæti verið fær um að gera aðeins meira,
en hér munum við leggja áherslu á helstu array gögn uppbygging eins og þú munt sjá það í C.
An array er bara stór blokk af minni. Það er það.
Þegar við segjum að við höfum fjölda 10 heiltölur, sem einfaldlega þýðir að við höfum sumir blokk
minni sem er nógu stórt til að halda 10 aðskildum heiltölur.
Miðað við að heiltala er 4 bæti, þetta þýðir að fylki af 10 heiltalna
er samfelld blokk af 40 bæti í minninu.
Jafnvel þegar þú notar fjölvíða fylki, sem við munum ekki fara á hér,
það er samt bara stór blokk af minni.
The fjölvíða ritháttur er bara þægindi.
Ef þú ert með 3 af 3 margþætt array heiltölur
þá program vilja raunverulega bara meðhöndla þetta sem stór blokk 36 bæti.
Heildarfjöldi heiltalna er 3 sinnum 3, og hver heiltala tekur upp 4 bæti.
>> Við skulum taka a líta á a undirstöðu dæmi.
Við sjáum hér 2 mismunandi leiðir báru fylki.
Við verðum að tjá 1 af þeim út fyrir the program til að safna saman
þar sem við lýsa x tvisvar.
Við munum taka a líta á sumir af the mismunur á milli þessara 2 gerðir af yfirlýsingum í hluti.
Báðar þessar línur lýsa fjölda N stærð,
þar sem við höfum skilgreint # N og 10.
Við gætum alveg eins auðveldlega getað beðið notandi til jákvæða heiltölu
og notað sem heiltala sem fjölda staka í fylki okkar.
Eins og nemandi ID dæmi okkar áður, þetta er góður af eins og að lýsa yfir 10 alveg sérstakt
ímyndaða breytur, x0, x1, x2, og svo á allt að xn-1.
Hunsa línur þar sem við lýsa yfir fylking, sérð að hornklofum ósnortinn
inni til lykkjur.
Þegar við skrifa eitthvað eins og x [3], sem ég ætla bara að lesa sem x krappi 3,
hægt er að hugsa um það eins og að biðja um ímyndaða X3.
Fyrirvara en með fjölda N stærð, þetta þýðir að fjöldi innan sviga,
sem við munum kalla vísitölu, getur verið allt frá 0 til N-1,
sem er samtals N vísitölum.
>> Til að hugsa um hvernig þetta virkar
muna að fylki er stór blokk af minni.
Miðað við að heiltala er 4 bæti, allt array x er 40 bæti blokk minni.
Svo vísar x0 á fyrstu 4 bæti í reitnum.
X [1] vísar til næstu 4 bæti og svo framvegis.
Þetta þýðir að byrja á x er allt forritið alltaf þarf að halda utan um.
Ef þú vilt nota x [400], þá veit forritið sem jafngildir
að aðeins 1.600 bæti eftir upphaf x.
Hvar fáum við 1.600 bæti úr? Það er bara 400 sinnum 4 bæti á heiltölu.
>> Áður en hann flutti á, það er mjög mikilvægt að átta sig á í C
það er engin framkvæmd á vísitölu sem við notum í fylki.
Stór blokk okkar er aðeins 10 heiltölur lengi, en ekkert mun æpa á okkur ef við skrifum x [20]
eða jafnvel x [-5].
Vísitalan er ekki einu sinni að vera tala.
Það getur verið handahófskennt tjáningu.
Í áætluninni sem við nota breytilega i frá til lykkju til vísitölu í array.
Þetta er mjög algengt mynstur, lykkja frá i = 0 til lengd fylkisins,
og svo nota ég eins vísitölu fylkisins.
Á þennan hátt sem þú lykkja í raun yfir allt fylki,
og þú getur annaðhvort framselja til hvers blettur í fylki eða nota það fyrir sumir útreikning.
>> Í fyrsta til lykkju, fer ég á 0,
og svo það mun tengja til 0 blettur í fylki, gildið 0 sinnum 2.
Þá i þrepum, og við að tengja fyrsta blettur í fylki gildi 1 sinnum 2.
Og ég þrepum aftur og svo framvegis þar til við gefum stöðu N-1 í fylkinu
gildi N-1 sinnum 2.
Þannig að við höfum búið til fylki með fyrstu 10 jafnvel númer.
Kannski Aftansöngur hefði verið aðeins betri heiti breytu en X,
en það hefði gefið það í burtu.
Annað fyrir lykkju þá prentar bara þau gildi sem við höfum nú þegar geymdar inni í array.
>> Við skulum reyna að keyra forrit með báðar yfirlýsingar array
og taka a líta á the framleiðsla af the program.
Eins og langt eins og við getum séð, forritið hagar sér á sama hátt fyrir báðar yfirlýsingar.
Við skulum einnig kíkja á hvað gerist ef við breyta fyrsta lykkja til að ekki hætta á N
heldur segja 10.000.
Vegur út í lok fylkisins.
Oops. Kannski þú hafir séð þetta áður.
A skiptingu kenna þýðir program hefur hrunið.
Þú byrjar að sjá þetta þegar þú snerta svæði af minni sem þú ættir ekki að vera að snerta.
Hér erum við að snerta 10.000 stöðum utan byrjun x,
sem er augljóslega staður í minni að við ættum ekki að vera að snerta.
Svo af okkur myndi sennilega ekki tilviljun að setja 10.000 í stað N,
En hvað ef við gerum eitthvað meira lúmskur eins segja skrifa minna en eða jafnt og N
í for lykkju ástand í stað þess að minna en N.
Mundu að fylki aðeins hefur vísitölur frá 0 til N-1,
sem þýðir að vísitalan N er handan lok fylkisins.
Forritið getur ekki hrun í þessu tilfelli, en það er enn villa.
Í raun er þetta villa er svo algeng að hún hefur eigin nafn það er,
slökkt um 1 villa.
>> Það er það fyrir grunnatriði.
Svo hvað eru helstu munur á milli 2 konar yfirlýsingar array?
Einn munur er þar stóra blokk af minni fer.
Í fyrstu yfirlýsingu, sem ég ætla að hringja í krappi-array tegund,
þótt það sé alls ekki hefðbundin heiti,
það fer á mánudaginn.
En í öðru lagi, sem ég ætla að kalla músina-array tegund, mun það fara á hrúga.
Þetta þýðir að þegar skilar er krappi array verður sjálfkrafa deallocated,
en eins og þú verður explicitily hringja ókeypis á músina fylkisins
eða annað sem þú ert með minni leka.
Auk þess krappi array er í raun ekki a breyta.
Þetta er mikilvægt. Það er bara tákn.
Þú getur hugsað um það sem stöðug að þýðandi velur fyrir þig.
Þetta þýðir að við getum ekki gert eitthvað eins og x + + með krappi tegund,
þótt þetta er fullkomlega gilt með músina tegund.
>> Bendillinn tegund er breytilegt.
Fyrir músina gerð, höfum við 2 aðskilin blokkir af minni.
Breytan x sjálft er geymt í stafla og er bara einn músina,
En stóra blokk af minni er geymt á hrúga.
Breytan x á stafla geymir bara heimilisfang
af stóru blokk minni á hrúga.
Einn vísbendingu um þetta er með stærð rekstraraðila.
Ef þú biður um stærð krappi fylking, það vilja gefa þú the stærð af the stór blokk minni,
eitthvað eins og 40 bæti,
en ef þú biður um stærð músina gerð fjölda,
það mun gefa þér stærð breytu x sig, sem á tækinu er líklega bara 4 bæti.
Using músina-array tegund, það er ómögulegt að beint að biðja um
stærð stóru blokk minni.
Þetta er yfirleitt ekki mikið takmarkanir þar sem við viljum mjög sjaldan stærð
af stór blokk af minni, og við getum yfirleitt reikna það ef við þurfum það.
>> Loks krappi array gerist að veita okkur með a smákaka fyrir Frumstilli fylki.
Við skulum sjá hvernig við gætum skrifað fyrstu 10 jafnvel heiltölur með the smákaka initilization.
Með músina fylking, það er ekki leiðin til að gera a smákaka svona.
Þetta er bara kynning á hvað þú getur gert með fylki.
Þeir mæta í nánast hvert forrit sem þú skrifar.
Vonandi getur þú nú séð betri leið til að gera nemandann auðkenni dæmi
frá byrjun af the vídeó.
>> Mitt nafn er Rob Bowden, og þetta er CS50.