[Powered by Google Translate] Nin diziler haqqında danışmaq edək.
Belə ki, niyə biz heç seriallarda istifadə etmək istəyirsiniz?
Yaxşı edək 5 tələbə kimlikleri saxlamaq lazımdır ki, bir proqram var deyirlər.
Bu 5 ayrı dəyişənlər üçün ağlabatan görünə bilər.
Biz bir az görmək lazımdır səbəblərə görə, biz 0-dan hesablanması başlamaq lazımdır.
Biz lazımdır dəyişənlərin int id0, int id1 və s olacaq.
Biz bir tələbə ID çıxış istədiyiniz hər hansı məntiq kopyalanamaz və yapışdırılır lazımdır
Bu tələbə kimlikleri hər biri üçün.
Biz, tələbələr CS50 olması baş verən yoxlamaq istəyirsinizsə
biz ilk id0 zamanı tələbə təmsil yoxlamaq lazımdır.
Sonra gələn tələbə üçün eyni etmək üçün, biz id0 üçün kodu kopyalayın ve yapışdırıb lazımdır
və id2, 3 və 4 id1 və s id0 bütün hadisələr dəyişin.
>> Qısa, sizi seçin və yapışdırıb etmək lazımdır ki, eşitmək kimi
daha yaxşı bir həll olduğunu düşünür başlamaq lazımdır.
İndi nə siz 5 tələbə kimlikleri lazım deyil 7 etmir həyata əgər?
Siz kodunu geri getmək və id5 əlavə etmək id6 lazımdır
bu kimlikleri bu 2 yeni kimlikleri üçün sinif məxsusdur Əgər yoxlamaq üçün məntiq seçin və yapışdırıb.
Birlikdə bütün bu kimlikleri birləşdirən bir şey yoxdur və belə vermək yoxdur
proqram 6 vasitəsilə kimlikleri 0 bunu.
Yaxşı indi sizin 100 tələbə kimlikleri həyata keçirir.
Bu, ayrı-ayrılıqda bu kimlikleri hər bəyan lazımdır ideal az görünür başlayan
və bu yeni kimlikleri üçün hər hansı bir məntiq seçin və yapışdırıb.
Amma bəlkə biz müəyyən və biz bütün 100 şagird üçün bunu edir.
Əgər bilmirsinizsə, ancaq nə qədər tələbələr nə var?
Bəzi n tələbələr yalnız və proqram n ki, nə istifadəçi xahiş edir.
Oh Uh. Bu, çox yaxşı gedən deyil.
Sizin proqram yalnız tələbələr bəzi daimi sayı işləyir.
>> Bu problemlərin bütün həll seriallarda və gözəllik deyil.
Belə ki, bir sıra nədir?
Bəzi proqramlaşdırma dillərində bir sıra növü, bir az daha çox ola bilər
siz C. onu görəcəksiniz kimi, lakin burada əsas array data strukturu müzakirə edəcəyik
Bir sıra yaddaş yalnız bir böyük blokdur. Vəssalam.
Biz yalnız bəzi məhəllə var deməkdir ki, 10 integers bir sıra var deyəndə
yaddaş 10 ayrı-ayrı integers keçirilməsi üçün kifayət qədər böyük.
Bir tam 4 bayt olduğunu fərz etsək, bu o deməkdir ki, 10 integers bir sıra
yaddaşında 40 bayt davamlı blokdur.
Biz burada getmək olmayacaq çoxölçülü diziler, istifadə Hətta
hələ yaddaş yalnız bir böyük məhəllə var.
Bu çoxölçülü notation bir rahatlığı var.
Siz integers 3 çoxölçülü dizi, bir 3 varsa
sonra proqram həqiqətən yalnız 36 bytes böyük bir blok kimi istifadə olunacaq.
Integers sayı 3 dəfə 3 və hər tam 4 bayt alır.
>> Üzrə əsas Məsələn nəzər salaq.
Biz burada elan serialların 2 müxtəlif yolları görə bilərsiniz.
Biz tərtib proqram üçün onlardan 1-Şərh lazımdır
biz iki dəfə x bəyan edir.
Biz bit bəyannamələrinin Bu 2 növləri arasında fərqləri bəzi nəzər lazımdır.
Bu xətlərin həm də ölçüsü N bir sıra elan
biz # 10 N müəyyən etmişdir.
Biz yalnız asanlıqla bir müsbət tam üçün istifadəçi xahiş bilərdi
və sıra elementləri bir sıra kimi tam istifadə.
Əvvəl tələbə ID misal kimi, bu tamamilə ayrı-ayrı 10 elan kimi növ edir
xəyali dəyişənlər; x0, x1, x2, və s xn-1 qədər.
Biz serialın bəyan yerləşir xətləri etmədən kvadrat mötərizə bütöv qeyd
loops üçün içəridə.
Biz x kimi bir şey yazarkən [3], hansı Mən yalnız, x bracket 3 kimi oxumaq lazımdır
siz xəyali x3 tələb kimi hesab edə bilər.
Ki Mötərizədə daxilində sayı, ölçüsü N, bu vasitələrin bir sıra daha bildirək
biz indeksi zəng bilərsiniz, 0-dan N-1 şey ola bilər
olan N indeksləri ümumi edir.
>> Bu, həqiqətən, necə düşünmək
serialın yaddaş böyük bir blok olduğunu unutmayın.
Bir tam 4 bayt olduğunu fərz etsək, bütün array x yaddaş 40 byte blokdur.
Belə ki, x0 blokunun ilk 4 bayt aiddir.
X [1] Növbəti 4 bayt və s aiddir.
Bu x başlanğıc heç takip lazımdır bütün proqram deməkdir.
X [400] istifadə etmək istəyirsinizsə, onda bu proqram bu ekvivalent olduğunu bilir
x başladıqdan sonra yalnız 1.600 bayt.
Biz 1,600 bytes almaq Where'd? Bu tam başına yalnız 400 dəfə 4 bayt var.
>> Hərəkət əvvəl, dərk etmək çox vacibdir ki, C
biz sıra istifadə indeksi heç bir mühafizə var.
Bizim böyük blok yalnız 10 integers uzun, lakin biz x [20] yazmaq əgər heç bir şey bizə fəğan edəcək
və ya hətta x [-5].
Indeksi hətta bir sıra olmaq deyil.
Hər hansı bir ixtiyari ifadə ola bilər.
Proqram biz massivinə indeksi loop üçün olan dəyişən i istifadə edin.
Bu, i = 0 serialın uzunluğu loop, çox ümumi nümunəsidir
və sonra array üçün index kimi i istifadə edir.
Bütün array üzərində səmərəli loop Bu yolla,
və ya array hər spot təyin və ya bir hesablanması üçün istifadə edə bilərsiniz.
>> Loop üçün ilk olaraq, i, 0 başlayır
və bu səbəblə sıra 0 spot, dəyəri 0 dəfə 2 təyin edəcək.
Sonra i əlavələr və biz dəyəri 1 dəfə 2 serialın ilk spot təyin.
Sonra sıra N-1 yerləşdirilməlidir qədər təkrar və s i əlavələr təyin qədər
dəyəri N-1 dəfə 2.
Beləliklə, biz ilk 10 belə nömrələri ilə bir sıra yaratdıq.
Bəlkə evens x çox dəyişən üçün bir az daha yaxşı ad olardı,
lakin üz şeyi verilmiş olardı.
Loop üçün ikinci sonra yalnız biz serialın içərisində saxlanılır ki, dəyərlər görüntüler.
>> Array bəyannamələrinin həm növləri ilə proqram çalışan cəhd edək
və proqramı ilə çıxış nəzər.
Bizdə göründüyü kimi, proqramın bəyannamələrinin həm növləri üçün eyni şəkildə davranır.
Biz N dayandırmaq üçün ilk loop dəyişdirmək əgər nın da nə nəzər salaq
lakin 10,000 deyirlər.
Serialın sonuna kənarda yol.
Üzr istəyirik. Bəlkə əvvəl bu gördük.
A seqmentasiyası günah proqram qəzaya anlamına gelir.
Sizə aid edilməməlidir yaddaş sahələri toxunmaq zaman bu görmeye başlamaq.
Burada biz, x başlanğıc kənarda 10,000 yerlərdə toxunan olunur
olan açıq-aydın biz toxunan lazım deyil yaddaş bir yerdir.
Bizim ən Beləliklə, yəqin ki, təsadüfən əvəzinə N 10.000 qoymaq olmaz
biz kimi daha incə bir şey ancaq yazmaq daha az və ya N bərabər nə demək
fərqli olaraq üçün loop vəziyyətdə N. az
Bir sıra yalnız 0-dan N-1 göstəriciləri var ki, saxla,
olan index N serialın sonuna kənarda deməkdir.
Bu proqram bu halda qəza ola bilər, lakin o, hələ də bir səhv var.
Əslində, bu səhv, o, öz adı var ki, ümumi
1 səhv bir off.
>> Əsasları üçün var.
Belə array bəyannamələrinin 2 növ arasında əsas fərqlər hansılardır?
Yaddaş böyük blok gedir harada bir fərqdir.
Ilk bəyannaməsində, mən bracket sıra növü olan zəng edəcəyik
bu halda heç bir şərti adı deməkdir
bu yığını gedəcək.
Mən göstərici sıra növü olacaq ikinci, halbuki, bu yığın gedəcək.
Bu zaman funksiyası qaytarır ki, bracket array avtomatik deallocated olacaq o deməkdir ki,
siz explicitily göstəricisidir sıra pulsuz zəng lazımdır halbuki
və ya başqa bir yaddaş sızıntısı var.
Bundan əlavə, bracket array əslində dəyişən deyil.
Vacibdir. Bu, yalnız bir simvol var.
Siz compiler sizin üçün seçən daimi olaraq hesab edə bilər.
Bu, biz x + + da bracket növü kimi bir şey edə bilməz deməkdir ki,
Bu göstərici növü ilə mükəmməl etibarlı olsa.
>> Bu göstərici növü dəyişir.
İmleci üçün, biz yaddaş 2 ayrı-ayrı bloklar var.
Dəyişən x özü yığını saxlanılır və yalnız bir göstərici deyil
lakin yaddaş böyük blok yığın saxlanılır.
Yığını üzrə dəyişən x yalnız ünvan saxlayan
yığın yaddaş böyük blokunun.
Bu biri dolayısı operator həcmi ilə.
Siz bracket serialın ölçüsü soruşsan ki, siz yaddaş böyük blok ölçüsü verəcək
40 bayt kimi bir şey,
lakin serialın göstərici növü ölçüsü soruşsan,
siz cihaz yalnız 4 bayt ehtimalı olan dəyişən x özü ölçüsü verəcək.
İmleci sıra növü istifadə edərək, birbaşa tələb etmək mümkün deyil
yaddaş böyük blok ölçüsü.
Çox nadir hallarda ölçüsü istəyirəm-ci ildən bu adətən çox bir məhdudiyyət deyil
böyük yaddaş bloku və biz lazımdır əgər biz adətən hesablamaq olar.
>> Nəhayət, bracket array bir sıra başlatılıyor üçün qısa bizə olur.
Biz qısa initilization istifadə ilk 10 belə integers yazmaq necə edək.
İmleci array, bu kimi qısa etmək üçün bir yol yoxdur.
Bu, diziler ilə nə bir giriş deyil.
Onlar yazmaq demək olar ki, hər proqramında göstərilir.
İnşallah indi tələbə kimlikleri misal bunu daha yaxşı bir şəkildə görə bilərsiniz
video başdan.
>> My name Rob Bowden, bu CS50 edir.