1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Nin diziler haqqında danışmaq edək. 2 00:00:09,360 --> 00:00:12,780 Belə ki, niyə biz heç seriallarda istifadə etmək istəyirsiniz? 3 00:00:12,780 --> 00:00:17,210 Yaxşı edək 5 tələbə kimlikleri saxlamaq lazımdır ki, bir proqram var deyirlər. 4 00:00:17,210 --> 00:00:21,270 Bu 5 ayrı dəyişənlər üçün ağlabatan görünə bilər. 5 00:00:21,270 --> 00:00:24,240 Biz bir az görmək lazımdır səbəblərə görə, biz 0-dan hesablanması başlamaq lazımdır. 6 00:00:24,240 --> 00:00:30,700 Biz lazımdır dəyişənlərin int id0, int id1 və s olacaq. 7 00:00:30,700 --> 00:00:34,870 Biz bir tələbə ID çıxış istədiyiniz hər hansı məntiq kopyalanamaz və yapışdırılır lazımdır 8 00:00:34,870 --> 00:00:36,870 Bu tələbə kimlikleri hər biri üçün. 9 00:00:36,870 --> 00:00:39,710 Biz, tələbələr CS50 olması baş verən yoxlamaq istəyirsinizsə 10 00:00:39,710 --> 00:00:43,910 biz ilk id0 zamanı tələbə təmsil yoxlamaq lazımdır. 11 00:00:43,910 --> 00:00:48,070 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 12 00:00:48,070 --> 00:00:54,430 və id2, 3 və 4 id1 və s id0 bütün hadisələr dəyişin. 13 00:00:54,430 --> 00:00:57,560 >> Qısa, sizi seçin və yapışdırıb etmək lazımdır ki, eşitmək kimi 14 00:00:57,560 --> 00:01:00,440 daha yaxşı bir həll olduğunu düşünür başlamaq lazımdır. 15 00:01:00,440 --> 00:01:05,360 İndi nə siz 5 tələbə kimlikleri lazım deyil 7 etmir həyata əgər? 16 00:01:05,360 --> 00:01:09,570 Siz kodunu geri getmək və id5 əlavə etmək id6 lazımdır 17 00:01:09,570 --> 00:01:14,260 bu kimlikleri bu 2 yeni kimlikleri üçün sinif məxsusdur Əgər yoxlamaq üçün məntiq seçin və yapışdırıb. 18 00:01:14,260 --> 00:01:19,600 Birlikdə bütün bu kimlikleri birləşdirən bir şey yoxdur və belə vermək yoxdur 19 00:01:19,600 --> 00:01:22,040 proqram 6 vasitəsilə kimlikleri 0 bunu. 20 00:01:22,040 --> 00:01:26,120 Yaxşı indi sizin 100 tələbə kimlikleri həyata keçirir. 21 00:01:26,120 --> 00:01:30,770 Bu, ayrı-ayrılıqda bu kimlikleri hər bəyan lazımdır ideal az görünür başlayan 22 00:01:30,770 --> 00:01:33,760 və bu yeni kimlikleri üçün hər hansı bir məntiq seçin və yapışdırıb. 23 00:01:33,760 --> 00:01:38,380 Amma bəlkə biz müəyyən və biz bütün 100 şagird üçün bunu edir. 24 00:01:38,380 --> 00:01:42,240 Əgər bilmirsinizsə, ancaq nə qədər tələbələr nə var? 25 00:01:42,240 --> 00:01:47,320 Bəzi n tələbələr yalnız və proqram n ki, nə istifadəçi xahiş edir. 26 00:01:47,320 --> 00:01:50,250 Oh Uh. Bu, çox yaxşı gedən deyil. 27 00:01:50,250 --> 00:01:53,820 Sizin proqram yalnız tələbələr bəzi daimi sayı işləyir. 28 00:01:53,820 --> 00:01:57,520 >> Bu problemlərin bütün həll seriallarda və gözəllik deyil. 29 00:01:57,520 --> 00:01:59,930 Belə ki, bir sıra nədir? 30 00:01:59,930 --> 00:02:04,480 Bəzi proqramlaşdırma dillərində bir sıra növü, bir az daha çox ola bilər 31 00:02:04,480 --> 00:02:09,960 siz C. onu görəcəksiniz kimi, lakin burada əsas array data strukturu müzakirə edəcəyik 32 00:02:09,960 --> 00:02:14,030 Bir sıra yaddaş yalnız bir böyük blokdur. Vəssalam. 33 00:02:14,030 --> 00:02:17,770 Biz yalnız bəzi məhəllə var deməkdir ki, 10 integers bir sıra var deyəndə 34 00:02:17,770 --> 00:02:20,740 yaddaş 10 ayrı-ayrı integers keçirilməsi üçün kifayət qədər böyük. 35 00:02:29,930 --> 00:02:33,410 Bir tam 4 bayt olduğunu fərz etsək, bu o deməkdir ki, 10 integers bir sıra 36 00:02:33,410 --> 00:02:37,180 yaddaşında 40 bayt davamlı blokdur. 37 00:02:42,660 --> 00:02:46,280 Biz burada getmək olmayacaq çoxölçülü diziler, istifadə Hətta 38 00:02:46,280 --> 00:02:49,200 hələ yaddaş yalnız bir böyük məhəllə var. 39 00:02:49,200 --> 00:02:51,840 Bu çoxölçülü notation bir rahatlığı var. 40 00:02:51,840 --> 00:02:55,640 Siz integers 3 çoxölçülü dizi, bir 3 varsa 41 00:02:55,640 --> 00:03:00,650 sonra proqram həqiqətən yalnız 36 bytes böyük bir blok kimi istifadə olunacaq. 42 00:03:00,650 --> 00:03:05,460 Integers sayı 3 dəfə 3 və hər tam 4 bayt alır. 43 00:03:05,460 --> 00:03:07,750 >> Üzrə əsas Məsələn nəzər salaq. 44 00:03:07,750 --> 00:03:10,660 Biz burada elan serialların 2 müxtəlif yolları görə bilərsiniz. 45 00:03:15,660 --> 00:03:18,580 Biz tərtib proqram üçün onlardan 1-Şərh lazımdır 46 00:03:18,580 --> 00:03:20,900 biz iki dəfə x bəyan edir. 47 00:03:20,900 --> 00:03:25,140 Biz bit bəyannamələrinin Bu 2 növləri arasında fərqləri bəzi nəzər lazımdır. 48 00:03:25,140 --> 00:03:28,560 Bu xətlərin həm də ölçüsü N bir sıra elan 49 00:03:28,560 --> 00:03:30,740 biz # 10 N müəyyən etmişdir. 50 00:03:30,740 --> 00:03:34,460 Biz yalnız asanlıqla bir müsbət tam üçün istifadəçi xahiş bilərdi 51 00:03:34,460 --> 00:03:37,250 və sıra elementləri bir sıra kimi tam istifadə. 52 00:03:37,250 --> 00:03:41,960 Əvvəl tələbə ID misal kimi, bu tamamilə ayrı-ayrı 10 elan kimi növ edir 53 00:03:41,960 --> 00:03:49,000 xəyali dəyişənlər; x0, x1, x2, və s xn-1 qədər. 54 00:03:57,270 --> 00:04:00,840 Biz serialın bəyan yerləşir xətləri etmədən kvadrat mötərizə bütöv qeyd 55 00:04:00,840 --> 00:04:02,090 loops üçün içəridə. 56 00:04:02,090 --> 00:04:09,660 Biz x kimi bir şey yazarkən [3], hansı Mən yalnız, x bracket 3 kimi oxumaq lazımdır 57 00:04:09,660 --> 00:04:13,090 siz xəyali x3 tələb kimi hesab edə bilər. 58 00:04:13,090 --> 00:04:17,519 Ki Mötərizədə daxilində sayı, ölçüsü N, bu vasitələrin bir sıra daha bildirək 59 00:04:17,519 --> 00:04:22,630 biz indeksi zəng bilərsiniz, 0-dan N-1 şey ola bilər 60 00:04:22,630 --> 00:04:25,660 olan N indeksləri ümumi edir. 61 00:04:25,660 --> 00:04:28,260 >> Bu, həqiqətən, necə düşünmək 62 00:04:28,260 --> 00:04:31,260 serialın yaddaş böyük bir blok olduğunu unutmayın. 63 00:04:31,260 --> 00:04:37,460 Bir tam 4 bayt olduğunu fərz etsək, bütün array x yaddaş 40 byte blokdur. 64 00:04:37,460 --> 00:04:41,360 Belə ki, x0 blokunun ilk 4 bayt aiddir. 65 00:04:45,810 --> 00:04:49,230 X [1] Növbəti 4 bayt və s aiddir. 66 00:04:49,230 --> 00:04:53,760 Bu x başlanğıc heç takip lazımdır bütün proqram deməkdir. 67 00:04:55,660 --> 00:04:59,840 X [400] istifadə etmək istəyirsinizsə, onda bu proqram bu ekvivalent olduğunu bilir 68 00:04:59,840 --> 00:05:03,460 x başladıqdan sonra yalnız 1.600 bayt. 69 00:05:03,460 --> 00:05:08,780 Biz 1,600 bytes almaq Where'd? Bu tam başına yalnız 400 dəfə 4 bayt var. 70 00:05:08,780 --> 00:05:13,170 >> Hərəkət əvvəl, dərk etmək çox vacibdir ki, C 71 00:05:13,170 --> 00:05:17,080 biz sıra istifadə indeksi heç bir mühafizə var. 72 00:05:17,080 --> 00:05:23,180 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 73 00:05:23,180 --> 00:05:26,060 və ya hətta x [-5]. 74 00:05:26,060 --> 00:05:28,240 Indeksi hətta bir sıra olmaq deyil. 75 00:05:28,240 --> 00:05:30,630 Hər hansı bir ixtiyari ifadə ola bilər. 76 00:05:30,630 --> 00:05:34,800 Proqram biz massivinə indeksi loop üçün olan dəyişən i istifadə edin. 77 00:05:34,800 --> 00:05:40,340 Bu, i = 0 serialın uzunluğu loop, çox ümumi nümunəsidir 78 00:05:40,340 --> 00:05:43,350 və sonra array üçün index kimi i istifadə edir. 79 00:05:43,350 --> 00:05:46,160 Bütün array üzərində səmərəli loop Bu yolla, 80 00:05:46,160 --> 00:05:50,600 və ya array hər spot təyin və ya bir hesablanması üçün istifadə edə bilərsiniz. 81 00:05:50,600 --> 00:05:53,920 >> Loop üçün ilk olaraq, i, 0 başlayır 82 00:05:53,920 --> 00:05:58,680 və bu səbəblə sıra 0 spot, dəyəri 0 dəfə 2 təyin edəcək. 83 00:05:58,680 --> 00:06:04,370 Sonra i əlavələr və biz dəyəri 1 dəfə 2 serialın ilk spot təyin. 84 00:06:04,370 --> 00:06:10,170 Sonra sıra N-1 yerləşdirilməlidir qədər təkrar və s i əlavələr təyin qədər 85 00:06:10,170 --> 00:06:13,370 dəyəri N-1 dəfə 2. 86 00:06:13,370 --> 00:06:17,810 Beləliklə, biz ilk 10 belə nömrələri ilə bir sıra yaratdıq. 87 00:06:17,810 --> 00:06:21,970 Bəlkə evens x çox dəyişən üçün bir az daha yaxşı ad olardı, 88 00:06:21,970 --> 00:06:24,760 lakin üz şeyi verilmiş olardı. 89 00:06:24,760 --> 00:06:30,210 Loop üçün ikinci sonra yalnız biz serialın içərisində saxlanılır ki, dəyərlər görüntüler. 90 00:06:30,210 --> 00:06:33,600 >> Array bəyannamələrinin həm növləri ilə proqram çalışan cəhd edək 91 00:06:33,600 --> 00:06:36,330 və proqramı ilə çıxış nəzər. 92 00:06:51,450 --> 00:06:57,020 Bizdə göründüyü kimi, proqramın bəyannamələrinin həm növləri üçün eyni şəkildə davranır. 93 00:06:57,020 --> 00:07:02,230 Biz N dayandırmaq üçün ilk loop dəyişdirmək əgər nın da nə nəzər salaq 94 00:07:02,230 --> 00:07:05,040 lakin 10,000 deyirlər. 95 00:07:05,040 --> 00:07:07,430 Serialın sonuna kənarda yol. 96 00:07:14,700 --> 00:07:17,210 Üzr istəyirik. Bəlkə əvvəl bu gördük. 97 00:07:17,210 --> 00:07:20,440 A seqmentasiyası günah proqram qəzaya anlamına gelir. 98 00:07:20,440 --> 00:07:24,430 Sizə aid edilməməlidir yaddaş sahələri toxunmaq zaman bu görmeye başlamaq. 99 00:07:24,430 --> 00:07:27,870 Burada biz, x başlanğıc kənarda 10,000 yerlərdə toxunan olunur 100 00:07:27,870 --> 00:07:31,920 olan açıq-aydın biz toxunan lazım deyil yaddaş bir yerdir. 101 00:07:31,920 --> 00:07:37,690 Bizim ən Beləliklə, yəqin ki, təsadüfən əvəzinə N 10.000 qoymaq olmaz 102 00:07:37,690 --> 00:07:42,930 biz kimi daha incə bir şey ancaq yazmaq daha az və ya N bərabər nə demək 103 00:07:42,930 --> 00:07:46,830 fərqli olaraq üçün loop vəziyyətdə N. az 104 00:07:46,830 --> 00:07:50,100 Bir sıra yalnız 0-dan N-1 göstəriciləri var ki, saxla, 105 00:07:50,100 --> 00:07:54,510 olan index N serialın sonuna kənarda deməkdir. 106 00:07:54,510 --> 00:07:58,050 Bu proqram bu halda qəza ola bilər, lakin o, hələ də bir səhv var. 107 00:07:58,050 --> 00:08:01,950 Əslində, bu səhv, o, öz adı var ki, ümumi 108 00:08:01,950 --> 00:08:03,970 1 səhv bir off. 109 00:08:03,970 --> 00:08:05,970 >> Əsasları üçün var. 110 00:08:05,970 --> 00:08:09,960 Belə array bəyannamələrinin 2 növ arasında əsas fərqlər hansılardır? 111 00:08:09,960 --> 00:08:13,960 Yaddaş böyük blok gedir harada bir fərqdir. 112 00:08:13,960 --> 00:08:17,660 Ilk bəyannaməsində, mən bracket sıra növü olan zəng edəcəyik 113 00:08:17,660 --> 00:08:20,300 bu halda heç bir şərti adı deməkdir 114 00:08:20,300 --> 00:08:22,480 bu yığını gedəcək. 115 00:08:22,480 --> 00:08:27,450 Mən göstərici sıra növü olacaq ikinci, halbuki, bu yığın gedəcək. 116 00:08:27,450 --> 00:08:32,480 Bu zaman funksiyası qaytarır ki, bracket array avtomatik deallocated olacaq o deməkdir ki, 117 00:08:32,480 --> 00:08:36,419 siz explicitily göstəricisidir sıra pulsuz zəng lazımdır halbuki 118 00:08:36,419 --> 00:08:38,010 və ya başqa bir yaddaş sızıntısı var. 119 00:08:38,010 --> 00:08:42,750 Bundan əlavə, bracket array əslində dəyişən deyil. 120 00:08:42,750 --> 00:08:45,490 Vacibdir. Bu, yalnız bir simvol var. 121 00:08:45,490 --> 00:08:49,160 Siz compiler sizin üçün seçən daimi olaraq hesab edə bilər. 122 00:08:49,160 --> 00:08:52,970 Bu, biz x + + da bracket növü kimi bir şey edə bilməz deməkdir ki, 123 00:08:52,970 --> 00:08:56,240 Bu göstərici növü ilə mükəmməl etibarlı olsa. 124 00:08:56,240 --> 00:08:58,270 >> Bu göstərici növü dəyişir. 125 00:08:58,270 --> 00:09:01,510 İmleci üçün, biz yaddaş 2 ayrı-ayrı bloklar var. 126 00:09:01,510 --> 00:09:06,060 Dəyişən x özü yığını saxlanılır və yalnız bir göstərici deyil 127 00:09:06,060 --> 00:09:08,620 lakin yaddaş böyük blok yığın saxlanılır. 128 00:09:08,620 --> 00:09:11,010 Yığını üzrə dəyişən x yalnız ünvan saxlayan 129 00:09:11,010 --> 00:09:14,010 yığın yaddaş böyük blokunun. 130 00:09:14,010 --> 00:09:17,370 Bu biri dolayısı operator həcmi ilə. 131 00:09:17,370 --> 00:09:22,480 Siz bracket serialın ölçüsü soruşsan ki, siz yaddaş böyük blok ölçüsü verəcək 132 00:09:22,480 --> 00:09:24,620 40 bayt kimi bir şey, 133 00:09:24,620 --> 00:09:26,920 lakin serialın göstərici növü ölçüsü soruşsan, 134 00:09:26,920 --> 00:09:32,740 siz cihaz yalnız 4 bayt ehtimalı olan dəyişən x özü ölçüsü verəcək. 135 00:09:32,740 --> 00:09:36,530 İmleci sıra növü istifadə edərək, birbaşa tələb etmək mümkün deyil 136 00:09:36,530 --> 00:09:38,530 yaddaş böyük blok ölçüsü. 137 00:09:38,530 --> 00:09:42,530 Çox nadir hallarda ölçüsü istəyirəm-ci ildən bu adətən çox bir məhdudiyyət deyil 138 00:09:42,530 --> 00:09:46,980 böyük yaddaş bloku və biz lazımdır əgər biz adətən hesablamaq olar. 139 00:09:46,980 --> 00:09:51,490 >> Nəhayət, bracket array bir sıra başlatılıyor üçün qısa bizə olur. 140 00:09:51,490 --> 00:09:56,130 Biz qısa initilization istifadə ilk 10 belə integers yazmaq necə edək. 141 00:10:11,220 --> 00:10:14,470 İmleci array, bu kimi qısa etmək üçün bir yol yoxdur. 142 00:10:14,470 --> 00:10:18,120 Bu, diziler ilə nə bir giriş deyil. 143 00:10:18,120 --> 00:10:20,990 Onlar yazmaq demək olar ki, hər proqramında göstərilir. 144 00:10:20,990 --> 00:10:24,390 İnşallah indi tələbə kimlikleri misal bunu daha yaxşı bir şəkildə görə bilərsiniz 145 00:10:24,390 --> 00:10:26,710 video başdan. 146 00:10:26,710 --> 00:10:29,960 >> My name Rob Bowden, bu CS50 edir.